// See if there is an error and trace it bool GetOpenGLError() { //SPEEDUP return in release build GLenum err=glGetError(); if (err==GL_NO_ERROR) return false; //LPCSTR ErrorStr; const char* ErrorStr; switch (err) { case GL_NO_ERROR : break; // NO ERROR case GL_INVALID_ENUM : ErrorStr="GL_INVALID_ENUM" ; break; case GL_INVALID_VALUE : ErrorStr="GL_INVALID_VALUE" ; break; case GL_INVALID_OPERATION: ErrorStr="GL_INVALID_OPERATION"; break; case GL_STACK_OVERFLOW : ErrorStr="GL_STACK_OVERFLOW" ; break; case GL_STACK_UNDERFLOW : ErrorStr="GL_STACK_UNDERFLOW" ; break; case GL_OUT_OF_MEMORY : ErrorStr="GL_OUT_OF_MEMORY" ; break; default : ErrorStr="<Unknown>";assert(0) ; break; } #ifdef SB_ANDROID const char* pChar = ""; //const char* pChar = gluErrorString(err); //TODOF: use glues http://code.google.com/p/glues/ dbg_msg("GL error #(0x%x): %s \r\n", err, ErrorStr) ; #else const char* pChar = gluErrorStringWIN(err); dbg_msg("GL error #(0x%x): %s \r\n", err, pChar) ; #endif //1026 TRACE1("OGL's glGetError() returned error %s\n",(LPCSTR)Error); return true; if ( err == GL_STACK_OVERFLOW ) { traceGLStack(); GetOpenGLError(); // test once more } return true; }
void CTextureCubeMap::UploadSubRegion(EFace const Face, void const * const Data, vec2u const & Offset, vec2u const & Size, EFormatComponents const Components, EScalarType const Type) { CheckedGLCall(glBindTexture(GL_TEXTURE_CUBE_MAP, Handle)); CheckExistingErrors(Texture2D::SubImage); glTexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + (int) Face, 0, Offset.X, Offset.Y, Size.X, Size.Y, FormatMatrix[(int) Components], Util::ScalarTypeMatrix[(int) Type], Data); if (OpenGLError()) { cerr << "Error occured during glTexSubImage2D for CTextureCubeMap: " << GetOpenGLError() << endl; cerr << "Handle is " << Handle << endl; cerr << "Offset is " << Offset << endl; cerr << "Size is " << Size << endl; cerr << "Format is " << FormatStringMatrix[(int) Components] << endl; cerr << "Type is " << Util::ScalarTypeStringMatrix[(int) Type] << endl; cerr << endl; } else { if (MipMaps) CheckedGLCall(glGenerateMipmap(GL_TEXTURE_CUBE_MAP)); ApplyParams(); } CheckedGLCall(glBindTexture(GL_TEXTURE_CUBE_MAP, 0)); }