diff options
author | Zaba999 <zaba.marcin@gmail.com> | 2012-09-26 22:59:37 +0200 |
---|---|---|
committer | Zaba999 <zaba.marcin@gmail.com> | 2012-09-26 22:59:37 +0200 |
commit | 400869ff86e88fdb12c892c7885c07ce2ae99e5e (patch) | |
tree | 4974075a6d57d0054284ca126f8a423ae48060e0 /src/graphics | |
parent | f6638a173e21fbee3cc961d3dea82cc89382b873 (diff) | |
parent | 45fd8aad33029746424031e12777f2824bda245e (diff) | |
download | colobot-400869ff86e88fdb12c892c7885c07ce2ae99e5e.tar.gz colobot-400869ff86e88fdb12c892c7885c07ce2ae99e5e.tar.bz2 colobot-400869ff86e88fdb12c892c7885c07ce2ae99e5e.zip |
Merge branch 'master' of git://github.com/colobot/colobot
Diffstat (limited to 'src/graphics')
-rw-r--r-- | src/graphics/core/vertex.h | 18 | ||||
-rw-r--r-- | src/graphics/engine/engine.cpp | 16 | ||||
-rw-r--r-- | src/graphics/engine/text.cpp | 75 | ||||
-rw-r--r-- | src/graphics/engine/text.h | 7 | ||||
-rw-r--r-- | src/graphics/opengl/gldevice.cpp | 8 |
5 files changed, 61 insertions, 63 deletions
diff --git a/src/graphics/core/vertex.h b/src/graphics/core/vertex.h index 9ab4dbb..e2c35c3 100644 --- a/src/graphics/core/vertex.h +++ b/src/graphics/core/vertex.h @@ -69,36 +69,28 @@ struct Vertex /** * \struct VertexCol - * \brief Vertex with color information - * - * This structure was created as analog to DirectX's D3DLVERTEX. + * \brief Colored vertex * * It contains: * - vertex coordinates (x,y,z) as Math::Vector, - * - RGBA color as Color, - * - RGBA specular color as Color, - * - texture coordinates (u,v) as Math::Point. + * - RGBA color as Color */ struct VertexCol { Math::Vector coord; Color color; - Color specular; - Math::Point texCoord; explicit VertexCol(Math::Vector aCoord = Math::Vector(), Color aColor = Color(), - Color aSpecular = Color(), Math::Point aTexCoord = Math::Point()) - : coord(aCoord), color(aColor), specular(aSpecular), texCoord(aTexCoord) {} + : coord(aCoord), color(aColor) {} - //! Returns a string "(c: [...], col: [...], sp: [...], tc: [...])" + //! Returns a string "(c: [...], col: [...])" inline std::string ToString() const { std::stringstream s; s.precision(3); - s << "(c: " << coord.ToString() << ", col: " << color.ToString() << ", sp: " - << specular.ToString() << ", tc: " << texCoord.ToString() << ")"; + s << "(c: " << coord.ToString() << ", col: " << color.ToString() << ")"; return s.str(); } }; diff --git a/src/graphics/engine/engine.cpp b/src/graphics/engine/engine.cpp index 37f9b00..c170922 100644 --- a/src/graphics/engine/engine.cpp +++ b/src/graphics/engine/engine.cpp @@ -3417,10 +3417,10 @@ void CEngine::DrawBackgroundGradient(const Color& up, const Color& down) VertexCol vertex[4] = { - VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color[1], color[2]), - VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color[0], color[2]), - VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color[1], color[2]), - VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color[0], color[2]) + VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color[1]), + VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color[0]), + VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color[1]), + VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color[0]) }; m_device->DrawPrimitive(PRIMITIVE_TRIANGLE_STRIP, vertex, 4); @@ -3567,10 +3567,10 @@ void CEngine::DrawOverColor() VertexCol vertex[4] = { - VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color[1], color[2]), - VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color[0], color[2]), - VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color[1], color[2]), - VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color[0], color[2]) + VertexCol(Math::Vector(p1.x, p1.y, 0.0f), color[1]), + VertexCol(Math::Vector(p1.x, p2.y, 0.0f), color[0]), + VertexCol(Math::Vector(p2.x, p1.y, 0.0f), color[1]), + VertexCol(Math::Vector(p2.x, p2.y, 0.0f), color[0]) }; m_device->DrawPrimitive(PRIMITIVE_TRIANGLE_STRIP, vertex, 4); diff --git a/src/graphics/engine/text.cpp b/src/graphics/engine/text.cpp index 36ad660..00b6617 100644 --- a/src/graphics/engine/text.cpp +++ b/src/graphics/engine/text.cpp @@ -150,8 +150,8 @@ void CText::FlushCache() } void CText::DrawText(const std::string &text, const std::vector<FontMetaChar> &format, - float size, Math::Point pos, float width, TextAlign align, - int eol) + float size, Math::Point pos, float width, TextAlign align, + int eol) { float sw = 0.0f; @@ -172,8 +172,8 @@ void CText::DrawText(const std::string &text, const std::vector<FontMetaChar> &f } void CText::DrawText(const std::string &text, FontType font, - float size, Math::Point pos, float width, TextAlign align, - int eol) + float size, Math::Point pos, float width, TextAlign align, + int eol) { float sw = 0.0f; @@ -194,8 +194,8 @@ void CText::DrawText(const std::string &text, FontType font, } void CText::SizeText(const std::string &text, const std::vector<FontMetaChar> &format, - float size, Math::Point pos, TextAlign align, - Math::Point &start, Math::Point &end) + float size, Math::Point pos, TextAlign align, + Math::Point &start, Math::Point &end) { start = end = pos; @@ -217,8 +217,8 @@ void CText::SizeText(const std::string &text, const std::vector<FontMetaChar> &f } void CText::SizeText(const std::string &text, FontType font, - float size, Math::Point pos, TextAlign align, - Math::Point &start, Math::Point &end) + float size, Math::Point pos, TextAlign align, + Math::Point &start, Math::Point &end) { start = end = pos; @@ -277,7 +277,7 @@ float CText::GetHeight(FontType font, float size) float CText::GetStringWidth(const std::string &text, - const std::vector<FontMetaChar> &format, float size) + const std::vector<FontMetaChar> &format, float size) { assert(StrUtils::Utf8StringLength(text) == format.size()); @@ -344,7 +344,7 @@ float CText::GetCharWidth(UTF8Char ch, FontType font, float size, float offset) int CText::Justify(const std::string &text, const std::vector<FontMetaChar> &format, - float size, float width) + float size, float width) { assert(StrUtils::Utf8StringLength(text) == format.size()); @@ -427,7 +427,7 @@ int CText::Justify(const std::string &text, FontType font, float size, float wid } int CText::Detect(const std::string &text, const std::vector<FontMetaChar> &format, - float size, float offset) + float size, float offset) { assert(StrUtils::Utf8StringLength(text) == format.size()); @@ -500,7 +500,7 @@ int CText::Detect(const std::string &text, FontType font, float size, float offs } void CText::DrawString(const std::string &text, const std::vector<FontMetaChar> &format, - float size, Math::Point pos, float width, int eol) + float size, Math::Point pos, float width, int eol) { assert(StrUtils::Utf8StringLength(text) == format.size()); @@ -509,24 +509,18 @@ void CText::DrawString(const std::string &text, const std::vector<FontMetaChar> FontType font = FONT_COLOBOT; float start = pos.x; - unsigned int index = 0; unsigned int fmtIndex = 0; - while (index < text.length()) + + std::vector<UTF8Char> chars; + StringToUTFCharList(text, chars); + for (auto it = chars.begin(); it != chars.end(); ++it) { font = static_cast<FontType>(format[fmtIndex] & FONT_MASK_FONT); // TODO: if (font == FONT_BUTTON) if (font == FONT_BUTTON) continue; - UTF8Char ch; - - int len = StrUtils::Utf8CharSizeAt(text, index); - if (len >= 1) - ch.c1 = text[index]; - if (len >= 2) - ch.c2 = text[index+1]; - if (len >= 3) - ch.c3 = text[index+2]; + UTF8Char ch = *it; float offset = pos.x - start; float cw = GetCharWidth(ch, font, size, offset); @@ -545,22 +539,16 @@ void CText::DrawString(const std::string &text, const std::vector<FontMetaChar> DrawHighlight(hl, pos, charSize); } - DrawChar(ch, font, size, pos); + DrawCharAndAdjustPos(ch, font, size, pos); - index += len; fmtIndex++; } // TODO: eol } -void CText::DrawString(const std::string &text, FontType font, - float size, Math::Point pos, float width, int eol) +void CText::StringToUTFCharList(const std::string &text, std::vector<UTF8Char> &chars) { - assert(font != FONT_BUTTON); - - m_engine->SetState(ENG_RSTATE_TEXT); - unsigned int index = 0; while (index < text.length()) { @@ -568,15 +556,30 @@ void CText::DrawString(const std::string &text, FontType font, int len = StrUtils::Utf8CharSizeAt(text, index); if (len >= 1) - ch.c1 = text[index]; + ch.c1 = text[index]; if (len >= 2) - ch.c2 = text[index+1]; + ch.c2 = text[index+1]; if (len >= 3) - ch.c3 = text[index+2]; + ch.c3 = text[index+2]; index += len; - DrawChar(ch, font, size, pos); + chars.push_back(ch); + } +} + +void CText::DrawString(const std::string &text, FontType font, + float size, Math::Point pos, float width, int eol) +{ + assert(font != FONT_BUTTON); + + m_engine->SetState(ENG_RSTATE_TEXT); + + std::vector<UTF8Char> chars; + StringToUTFCharList(text, chars); + for (auto it = chars.begin(); it != chars.end(); ++it) + { + DrawCharAndAdjustPos(*it, font, size, pos); } } @@ -660,7 +663,7 @@ void CText::DrawHighlight(FontHighlight hl, Math::Point pos, Math::Point size) m_device->SetRenderState(RENDER_STATE_TEXTURING, true); } -void CText::DrawChar(UTF8Char ch, FontType font, float size, Math::Point &pos) +void CText::DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, Math::Point &pos) { // TODO: if (font == FONT_BUTTON) if (font == FONT_BUTTON) return; diff --git a/src/graphics/engine/text.h b/src/graphics/engine/text.h index e587609..bb9a32d 100644 --- a/src/graphics/engine/text.h +++ b/src/graphics/engine/text.h @@ -292,10 +292,11 @@ protected: void DrawString(const std::string &text, FontType font, float size, Math::Point pos, float width, int eol); void DrawHighlight(FontHighlight hl, Math::Point pos, Math::Point size); - void DrawChar(UTF8Char ch, FontType font, float size, Math::Point &pos); + void DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, Math::Point &pos); + void StringToUTFCharList(const std::string &text, std::vector<UTF8Char> &chars); protected: - CInstanceManager* m_iMan; + CInstanceManager* m_iMan; CEngine* m_engine; CDevice* m_device; @@ -305,7 +306,7 @@ protected: std::map<FontType, MultisizeFont*> m_fonts; FontType m_lastFontType; - int m_lastFontSize; + int m_lastFontSize; CachedFont* m_lastCachedFont; }; diff --git a/src/graphics/opengl/gldevice.cpp b/src/graphics/opengl/gldevice.cpp index 1f9c6b0..bbad0a7 100644 --- a/src/graphics/opengl/gldevice.cpp +++ b/src/graphics/opengl/gldevice.cpp @@ -101,7 +101,7 @@ bool CGLDevice::Create() return false; } - if ( (! GLEW_ARB_multitexture) || (! GLEW_EXT_texture_env_combine) || (! GLEW_EXT_secondary_color) ) + if ( (! GLEW_ARB_multitexture) || (! GLEW_EXT_texture_env_combine) ) { GetLogger()->Error("GLEW reports required extensions not supported\n"); return false; @@ -887,8 +887,6 @@ void CGLDevice::DrawPrimitive(PrimitiveType type, const VertexCol *vertices, int for (int i = 0; i < vertexCount; ++i) { glColor4fv(const_cast<GLfloat*>(vertices[i].color.Array())); - glSecondaryColor3fv(const_cast<GLfloat*>(vertices[i].specular.Array())); - glMultiTexCoord2fv(GL_TEXTURE0, const_cast<GLfloat*>(vertices[i].texCoord.Array())); glVertex3fv(const_cast<GLfloat*>(vertices[i].coord.Array())); } @@ -1244,6 +1242,7 @@ void CGLDevice::SetFogParams(FogMode mode, const Color &color, float start, floa glFogf(GL_FOG_START, start); glFogf(GL_FOG_END, end); glFogf(GL_FOG_DENSITY, density); + glFogfv(GL_FOG_COLOR, color.Array()); } void CGLDevice::GetFogParams(FogMode &mode, Color &color, float &start, float &end, float &density) @@ -1258,6 +1257,9 @@ void CGLDevice::GetFogParams(FogMode &mode, Color &color, float &start, float &e glGetFloatv(GL_FOG_START, static_cast<GLfloat*>(&start)); glGetFloatv(GL_FOG_END, static_cast<GLfloat*>(&end)); glGetFloatv(GL_FOG_DENSITY, static_cast<GLfloat*>(&density)); + GLfloat col[4] = { 0.0f }; + glGetFloatv(GL_FOG_COLOR, col); + color = Color(col[0], col[1], col[2], col[3]); } void CGLDevice::SetCullMode(CullMode mode) |