summaryrefslogtreecommitdiffstats
path: root/src/graphics
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-09-26 16:31:04 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-09-26 16:31:04 +0200
commit45fd8aad33029746424031e12777f2824bda245e (patch)
tree7c984ec6bfda42c807ba48440f6d61fcef9056ef /src/graphics
parentb06544871ae48871fc302706ecc49b78c6bcb3d2 (diff)
downloadcolobot-45fd8aad33029746424031e12777f2824bda245e.tar.gz
colobot-45fd8aad33029746424031e12777f2824bda245e.tar.bz2
colobot-45fd8aad33029746424031e12777f2824bda245e.zip
Fog color fix; refactoring
- fixed fog color setting - removed unused glSecondaryColor and altered struct VertexCol - minor refactoring in CText
Diffstat (limited to 'src/graphics')
-rw-r--r--src/graphics/core/vertex.h18
-rw-r--r--src/graphics/engine/engine.cpp16
-rw-r--r--src/graphics/engine/text.cpp78
-rw-r--r--src/graphics/engine/text.h7
-rw-r--r--src/graphics/opengl/gldevice.cpp8
5 files changed, 61 insertions, 66 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 da9f4ac..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());
@@ -511,9 +511,10 @@ void CText::DrawString(const std::string &text, const std::vector<FontMetaChar>
unsigned int fmtIndex = 0;
- std::vector<UTF8Char> chars = StringToUTFCharList(text);
- for(auto it=chars.begin(); it != chars.end(); ++it){
-
+ 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)
@@ -546,37 +547,38 @@ void CText::DrawString(const std::string &text, const std::vector<FontMetaChar>
// TODO: eol
}
-std::vector<UTF8Char> CText::StringToUTFCharList(const std::string &text) {
- std::vector<UTF8Char> v;
- unsigned int index = 0;
- while (index < text.length())
- {
- 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];
-
- index += len;
-
- v.push_back(ch);
- }
- return v;
+void CText::StringToUTFCharList(const std::string &text, std::vector<UTF8Char> &chars)
+{
+ unsigned int index = 0;
+ while (index < text.length())
+ {
+ 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];
+
+ index += len;
+
+ chars.push_back(ch);
+ }
}
void CText::DrawString(const std::string &text, FontType font,
- float size, Math::Point pos, float width, int eol)
+ 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);
- for(auto it=chars.begin(); it != chars.end(); ++it){
+ std::vector<UTF8Char> chars;
+ StringToUTFCharList(text, chars);
+ for (auto it = chars.begin(); it != chars.end(); ++it)
+ {
DrawCharAndAdjustPos(*it, font, size, pos);
}
}
diff --git a/src/graphics/engine/text.h b/src/graphics/engine/text.h
index 0ecf7cd..bb9a32d 100644
--- a/src/graphics/engine/text.h
+++ b/src/graphics/engine/text.h
@@ -293,11 +293,10 @@ protected:
float size, Math::Point pos, float width, int eol);
void DrawHighlight(FontHighlight hl, Math::Point pos, Math::Point size);
void DrawCharAndAdjustPos(UTF8Char ch, FontType font, float size, Math::Point &pos);
- std::vector<UTF8Char>
- StringToUTFCharList(const std::string &text);
+ void StringToUTFCharList(const std::string &text, std::vector<UTF8Char> &chars);
protected:
- CInstanceManager* m_iMan;
+ CInstanceManager* m_iMan;
CEngine* m_engine;
CDevice* m_device;
@@ -307,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)