more X11/Linux debug-graphics fixes

This commit is contained in:
Erwin Coumans (Google)
2014-06-30 16:03:36 -07:00
parent 8e2a4f8171
commit b7402df015
4 changed files with 78 additions and 58 deletions

View File

@@ -68,8 +68,8 @@ void MyMouseButtonCallback(int button, int state, float x, float y)
}
}
int sWidth = 1050;
int sHeight = 768;
int sWidth = 800;//1050;
int sHeight = 600;//768;
GLPrimitiveRenderer* primRenderer=0;
//GwenOpenGL3CoreRenderer* gwenRenderer=0;
Gwen::Renderer::Base* gwenRenderer =0;
@@ -308,7 +308,7 @@ int main()
b3gDefaultOpenGLWindow* window = new b3gDefaultOpenGLWindow();
window->setKeyboardCallback(keyCallback);
b3gWindowConstructionInfo wci;
wci.m_openglVersion = 2;
wci.m_openglVersion = 3;
wci.m_width = sWidth;
wci.m_height = sHeight;
// wci.m_resizeCallback = MyResizeCallback;
@@ -324,14 +324,25 @@ int main()
printf("Exit: Error cannot extract OpenGL version from GL_VERSION string\n");
exit(0);
}
if (majorGlVersion>=3)
if (majorGlVersion>=3 && wci.m_openglVersion>=3)
{
float retinaScale = 1.f;
#ifndef __APPLE__
#ifndef _WIN32
//we need glewExperimental on Linux
glewExperimental = GL_TRUE;
#endif // _WIN32
glewInit();
#endif
//we ned to call glGetError twice, because of some Ubuntu/Intel/OpenGL issue
GLuint err = glGetError();
err = glGetError();
assert(err==GL_NO_ERROR);
retinaScale = window->getRetinaScale();
primRenderer = new GLPrimitiveRenderer(sWidth,sHeight);
@@ -410,7 +421,7 @@ int main()
// MSG msg;
while( !window->requestedExit() )
{
if (majorGlVersion<3)
if (majorGlVersion<3 || wci.m_openglVersion<3)
{
saveOpenGLState(sWidth,sHeight);
}
@@ -503,7 +514,7 @@ int main()
}
window->endRendering();
if (majorGlVersion<3)
if (majorGlVersion<3 || wci.m_openglVersion<3)
{
restoreOpenGLState();
}

View File

@@ -1,13 +1,26 @@
///See http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-14-render-to-texture/
bool gIntelLinuxglDrawBufferWorkaround=false;
#include "GLRenderToTexture.h"
#include "Bullet3Common/b3Scalar.h" // for b3Assert
#include <string.h>
#include <stdio.h>
bool gIntelLinuxglDrawBufferWorkaround=false;
GLRenderToTexture::GLRenderToTexture()
:m_framebufferName(0)
{
const GLubyte* ven = glGetString(GL_VENDOR);
printf("ven = %s\n",ven);
if (strncmp((const char*)ven,"Intel",5)==0)
{
printf("Workaround for some crash in the Intel OpenGL driver on Linux/Ubuntu\n");
gIntelLinuxglDrawBufferWorkaround=true;
}
}
void GLRenderToTexture::init(int width, int height, GLuint textureId, int renderTextureType)

View File

@@ -17,7 +17,6 @@ struct GLRenderToTexture
bool m_initialized;
int m_renderTextureType;
public:
GLRenderToTexture();
void init(int width, int height, GLuint textureId, int renderTextureType=RENDERTEXTURE_COLOR);

View File

@@ -15,7 +15,6 @@
#include <unistd.h>
#include <pthread.h>
extern bool gIntelLinuxglDrawBufferWorkaround;
GLint att[] = { GLX_RGBA, GLX_DEPTH_SIZE, 24, GLX_DOUBLEBUFFER, None };
static bool forceOpenGL3 = true;
@@ -235,11 +234,6 @@ void X11OpenGLWindow::enableOpenGL()
const GLubyte* ven = glGetString(GL_VENDOR);
printf("GL_VENDOR=%s\n", ven);
if (strncmp((const char*)ven,"Intel",5)==0)
{
printf("Workaround for some crash in the Intel OpenGL driver on Linux/Ubuntu\n");
gIntelLinuxglDrawBufferWorkaround=true;
}
const GLubyte* ren = glGetString(GL_RENDERER);
printf("GL_RENDERER=%s\n",ren);
const GLubyte* ver = glGetString(GL_VERSION);
@@ -276,7 +270,10 @@ printf("createWindow\n");
m_data->m_root = DefaultRootWindow(m_data->m_dpy);
if (ci.m_openglVersion < 3)
{
forceOpenGL3 = false;
}
if (forceOpenGL3)
{