// that SetCurrent() can only be called for a shown window, so check for it
wxASSERT_MSG( IsShownOnScreen(), wxT("can't make hidden GL canvas current") );
-
+
return context.SetCurrent(*static_cast<const wxGLCanvas *>(this));
}
-#ifndef wxHAS_OPENGL_ES
bool wxGLCanvasBase::SetColour(const wxString& colour)
{
wxColour col = wxTheColourDatabase->Find(colour);
- if ( !col.Ok() )
+ if ( !col.IsOk() )
return false;
+#ifdef wxHAS_OPENGL_ES
+ wxGLAPI::glColor3f((GLfloat) (col.Red() / 256.), (GLfloat) (col.Green() / 256.),
+ (GLfloat) (col.Blue() / 256.));
+#else
GLboolean isRGBA;
glGetBooleanv(GL_RGBA_MODE, &isRGBA);
if ( isRGBA )
{
- glColor3f(col.Red() / 256., col.Green() / 256., col.Blue() / 256.);
+ glColor3f((GLfloat) (col.Red() / 256.), (GLfloat) (col.Green() / 256.),
+ (GLfloat) (col.Blue() / 256.));
}
else // indexed colour
{
glIndexi(pix);
}
-
+#endif
return true;
}
-#endif
wxGLCanvasBase::~wxGLCanvasBase()
{
if ( desired )
glEnableClientState(flag);
else
- glDisableClientState(flag);
+ glDisableClientState(flag);
}
return former;
}
if ( desired )
glEnableClientState(flag);
else
- glDisableClientState(flag);
+ glDisableClientState(flag);
}
#endif
{
}
+void wxGLAPI::glFrustum(GLfloat left, GLfloat right, GLfloat bottom,
+ GLfloat top, GLfloat zNear, GLfloat zFar)
+{
+#if wxUSE_OPENGL_EMULATION
+ ::glFrustumf(left, right, bottom, top, zNear, zFar);
+#else
+ ::glFrustum(left, right, bottom, top, zNear, zFar);
+#endif
+}
+
void wxGLAPI::glBegin(GLenum mode)
{
#if wxUSE_OPENGL_EMULATION
{
wxFAIL_MSG("nested glBegin");
}
-
+
s_mode = mode;
s_texCoordsUsed = false;
s_colorsUsed = false;
s_normalsUsed = false;
-
+
s_texCoords.clear();
s_normals.clear();
s_colors.clear();
{
wxFAIL_MSG("glTexCoord2f called outside glBegin/glEnd");
}
-
+
else
{
s_texCoordsUsed = true;
{
s_texCoords.push_back(s_currentTexCoord[0]);
s_texCoords.push_back(s_currentTexCoord[1]);
-
+
s_normals.push_back(s_currentNormal[0]);
s_normals.push_back(s_currentNormal[1]);
s_normals.push_back(s_currentNormal[2]);
-
+
s_colors.push_back(s_currentColor[0]);
s_colors.push_back(s_currentColor[1]);
s_colors.push_back(s_currentColor[2]);
s_colors.push_back(s_currentColor[3]);
-
+
s_vertices.push_back(x);
s_vertices.push_back(y);
s_vertices.push_back(z);
else
{
s_normalsUsed = true;
- s_currentNormal[0] = nx;
- s_currentNormal[1] = ny;
- s_currentNormal[2] = nz;
+ s_currentNormal[0] = nx;
+ s_currentNormal[1] = ny;
+ s_currentNormal[2] = nz;
}
#else
::glNormal3f(nx,ny,nz);
void wxGLAPI::glColor3f(GLfloat r, GLfloat g, GLfloat b)
{
#if wxUSE_OPENGL_EMULATION
- glColor4f(r,g,b,1.0);
+ glColor4f(r,g,b,1.0);
#else
::glColor3f(r,g,b);
#endif
bool formerNormals = SetState( GL_NORMAL_ARRAY, s_normalsUsed );
bool formerTexCoords = SetState( GL_TEXTURE_COORD_ARRAY, s_texCoordsUsed );
bool formerVertex = glIsEnabled(GL_VERTEX_ARRAY);
-
+
if( !formerVertex )
glEnableClientState(GL_VERTEX_ARRAY);
-
+
if ( s_colorsUsed )
glColorPointer( 4, GL_FLOAT, 0, &s_colors[0] );
-
+
if ( s_normalsUsed )
glNormalPointer( GL_FLOAT, 0, &s_normals[0] );
-
+
if ( s_texCoordsUsed )
glTexCoordPointer( 2, GL_FLOAT, 0, &s_texCoords[0] );
-
+
glVertexPointer(3, GL_FLOAT, 0, &s_vertices[0]);
glDrawArrays( s_mode, 0, s_vertices.size() / 3 );
-
+
if ( s_colorsUsed != formerColors )
RestoreState( GL_COLOR_ARRAY, formerColors );
-
+
if ( s_normalsUsed != formerNormals )
RestoreState( GL_NORMAL_ARRAY, formerColors );
-
+
if ( s_texCoordsUsed != formerTexCoords )
RestoreState( GL_TEXTURE_COORD_ARRAY, formerColors );
-
+
if( !formerVertex )
glDisableClientState(GL_VERTEX_ARRAY);
-
+
s_mode = 0xFF;
#else
::glEnd();