1
0
forked from 0ad/0ad

Windows fixes

This was SVN commit r8884.
This commit is contained in:
Ykkrosh 2011-02-03 02:33:37 +00:00
parent cb78822f19
commit c710e718aa
5 changed files with 48 additions and 45 deletions

View File

@ -77,42 +77,16 @@ void CLOSTexture::BindTexture(int unit)
g_Renderer.BindTexture(unit, m_Texture);
}
CMatrix3D CLOSTexture::GetTextureMatrix()
const float* CLOSTexture::GetTextureMatrix()
{
debug_assert(m_MapSize);
// We want to map
// world pos (0, y, 0) (i.e. first vertex)
// onto texcoord (0.5/texsize, 0.5/texsize) (i.e. middle of first texel);
// world pos ((mapsize-1)*cellsize, y, (mapsize-1)*cellsize) (i.e. last vertex)
// onto texcoord ((mapsize-0.5) / texsize, (mapsize-0.5) / texsize) (i.e. middle of last texel)
// so construct an appropriate matrix:
float s = (m_MapSize-1) / (float)(m_TextureSize * (m_MapSize-1) * CELL_SIZE);
float t = 0.5f / m_TextureSize;
CMatrix3D m;
m.SetZero();
m._11 = s;
m._23 = s;
m._14 = t;
m._24 = t;
m._44 = 1;
return m;
debug_assert(!m_Dirty);
return &m_TextureMatrix._11;
}
CMatrix3D CLOSTexture::GetMinimapTextureMatrix()
const float* CLOSTexture::GetMinimapTextureMatrix()
{
debug_assert(m_MapSize);
// We want to map UV (0,0)-(1,1) onto (0,0)-(mapsize/texsize, mapsize/texsize)
float s = m_MapSize / (float)m_TextureSize;
CMatrix3D m;
m.SetZero();
m._11 = s;
m._22 = s;
m._44 = 1;
return m;
debug_assert(!m_Dirty);
return &m_MinimapTextureMatrix._11;
}
void CLOSTexture::ConstructTexture(int unit)
@ -128,6 +102,33 @@ void CLOSTexture::ConstructTexture(int unit)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
{
// Texture matrix: We want to map
// world pos (0, y, 0) (i.e. first vertex)
// onto texcoord (0.5/texsize, 0.5/texsize) (i.e. middle of first texel);
// world pos ((mapsize-1)*cellsize, y, (mapsize-1)*cellsize) (i.e. last vertex)
// onto texcoord ((mapsize-0.5) / texsize, (mapsize-0.5) / texsize) (i.e. middle of last texel)
float s = (m_MapSize-1) / (float)(m_TextureSize * (m_MapSize-1) * CELL_SIZE);
float t = 0.5f / m_TextureSize;
m_TextureMatrix.SetZero();
m_TextureMatrix._11 = s;
m_TextureMatrix._23 = s;
m_TextureMatrix._14 = t;
m_TextureMatrix._24 = t;
m_TextureMatrix._44 = 1;
}
{
// Minimap matrix: We want to map UV (0,0)-(1,1) onto (0,0)-(mapsize/texsize, mapsize/texsize)
float s = m_MapSize / (float)m_TextureSize;
m_MinimapTextureMatrix.SetZero();
m_MinimapTextureMatrix._11 = s;
m_MinimapTextureMatrix._22 = s;
m_MinimapTextureMatrix._44 = 1;
}
}
void CLOSTexture::RecomputeTexture(int unit)

View File

@ -17,10 +17,9 @@
#include "lib/ogl.h"
#include "maths/Matrix3D.h"
#include "simulation2/components/ICmpRangeManager.h"
class CMatrix3D;
/**
* Maintains the LOS (fog-of-war / shroud-of-darkness) texture, used for
* rendering and for the minimap.
@ -50,17 +49,17 @@ public:
/**
* Returns a matrix to map (x,y,z) world coordinates onto (u,v) LOS texture
* coordinates.
* coordinates, in the form expected by glLoadMatrixf.
* This must only be called after BindTexture.
*/
CMatrix3D GetTextureMatrix();
const float* GetTextureMatrix();
/**
* Returns a matrix to map (0,0)-(1,1) texture coordinates onto LOS texture
* coordinates.
* coordinates, in the form expected by glLoadMatrixf.
* This must only be called after BindTexture.
*/
CMatrix3D GetMinimapTextureMatrix();
const float* GetMinimapTextureMatrix();
private:
void ConstructTexture(int unit);
@ -75,4 +74,7 @@ private:
ssize_t m_MapSize; // vertexes per side
GLsizei m_TextureSize; // texels per side
CMatrix3D m_TextureMatrix;
CMatrix3D m_MinimapTextureMatrix;
};

View File

@ -375,7 +375,7 @@ void CMiniMap::Draw()
glColor3f(0.0f, 0.0f, 0.0f);
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(&losTexture.GetMinimapTextureMatrix()._11);
glLoadMatrixf(losTexture.GetMinimapTextureMatrix());
glMatrixMode(GL_MODELVIEW);
DrawTexture(1.0f, angle, x, y, x2, y2, z);

View File

@ -104,7 +104,7 @@ struct STileBlend
{
bool operator()(const STileBlend& a) const
{
return a.m_TileMask & (1 << 8);
return (a.m_TileMask & (1 << 8)) != 0;
}
};
};

View File

@ -265,7 +265,7 @@ void TerrainRenderer::RenderTerrain(ShadowMap* shadow)
streamflags |= STREAM_POSTOUV1;
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(&losTexture.GetTextureMatrix()._11);
glLoadMatrixf(losTexture.GetTextureMatrix());
glMatrixMode(GL_MODELVIEW);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
@ -340,7 +340,7 @@ void TerrainRenderer::RenderTerrain(ShadowMap* shadow)
streamflags |= STREAM_POSTOUV3;
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(&losTexture.GetTextureMatrix()._11);
glLoadMatrixf(losTexture.GetTextureMatrix());
glMatrixMode(GL_MODELVIEW);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
@ -385,7 +385,7 @@ void TerrainRenderer::RenderTerrain(ShadowMap* shadow)
streamflags |= STREAM_POSTOUV2;
glMatrixMode(GL_TEXTURE);
glLoadMatrixf(&losTexture.GetTextureMatrix()._11);
glLoadMatrixf(losTexture.GetTextureMatrix());
glMatrixMode(GL_MODELVIEW);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
@ -566,7 +566,7 @@ void TerrainRenderer::RenderWater()
pglClientActiveTextureARB(GL_TEXTURE1);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glLoadMatrixf(&losTexture.GetTextureMatrix()._11);
glLoadMatrixf(losTexture.GetTextureMatrix());
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_MODULATE);
@ -638,7 +638,7 @@ void TerrainRenderer::RenderWater()
pglUniform4fARB( translation, tx, ty, 0, 0 );
pglUniformMatrix4fvARB( reflectionMatrix, 1, false, &WaterMgr->m_ReflectionMatrix._11 );
pglUniformMatrix4fvARB( refractionMatrix, 1, false, &WaterMgr->m_RefractionMatrix._11 );
pglUniformMatrix4fvARB( losMatrix, 1, false, &losTexture.GetTextureMatrix()._11 );
pglUniformMatrix4fvARB( losMatrix, 1, false, losTexture.GetTextureMatrix() );
pglUniform1iARB( normalMap, 0 ); // texture unit 0
pglUniform1iARB( reflectionMap, 1 ); // texture unit 1
pglUniform1iARB( refractionMap, 2 ); // texture unit 2