Package: libgl1-mesa-dri Version: 7.5.1-1 Severity: normal I've here a bigger program which worked in previous (cannot tell which) version of this package, but currently it seems to crash when it calls glReadPixels. I tried to create a similar testcase for the bug report and noticed that it only(?) happened when I tried to read from frontbuffer. The simple test is attached to this mail. It can be compiled with:
g++ -o readpixels_z readpixels_z.cpp `sdl-config --cflags` `sdl-config --libs` -lGL -lGLU Backtrace: #0 0x00000000 in ?? () #1 0xb7729dba in _swrast_ReadPixels (ctx=0x64, x=0, y=0, width=100, height=100, format=6407, type=5121, packing=0x809a40c, pixels=0xbfff7b98) at swrast/s_readpix.c:605 #2 0xb7604c49 in intelReadPixels (ctx=0x808d530, x=0, y=0, width=100, height=100, format=6407, type=5121, pack=0x809a40c, pixels=0xbfff7b98) at intel_pixel_read.c:305 #3 0xb7794ec6 in _mesa_ReadPixels (x=0, y=0, width=100, height=100, format=6407, type=5121, pixels=0xbfff7b98) at main/readpix.c:191 #4 0x08048e42 in Test_glReadPixels() () #5 0x0804908b in main () --- System information. --- Architecture: i386 Kernel: Linux 2.6.31-rc5 Debian Release: squeeze/sid 500 unstable ftp.debian.org 500 unstable eeepc.debian.net 1 experimental ftp.debian.org --- Package information. --- Depends (Version) | Installed ===============================-+-============== libc6 (>= 2.3.6-6~) | 2.9-26 libdrm-intel1 (>= 2.4.9) | 2.4.12-1 libdrm2 (>= 2.3.1) | 2.4.12-1 libexpat1 (>= 1.95.8) | 2.0.1-4 Package's Recommends field is empty. Suggests (Version) | Installed ========================-+-=========== libglide3 |
#include <iostream> #include <GL/gl.h> #include <GL/glu.h> #include "SDL.h" using namespace std; const unsigned int WIDTH = 100; const unsigned int HEIGHT = 100; const unsigned int BPP = 16; SDL_Surface *surface; bool Test_glReadPixels() { unsigned char pixels[WIDTH*HEIGHT*3]; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.0f, 1.0f, -6.0f); glVertex3f(-1.0f, -1.0f, -6.0f); glVertex3f(1.0f, -1.0f, -6.0f); glEnd(); SDL_GL_SwapBuffers(); // Full Read -> all pixel at the same time glReadBuffer( GL_FRONT ); glReadPixels(0, 0, WIDTH, HEIGHT, GL_RGB, GL_UNSIGNED_BYTE, static_cast<void*>(pixels)); return true; } int main() { int videoFlags; const SDL_VideoInfo *videoInfo; if (SDL_Init(SDL_INIT_VIDEO) < 0) { cerr << "Video initialization failed: " << SDL_GetError() << endl; SDL_Quit(); exit(1); } videoInfo = SDL_GetVideoInfo(); if (!videoInfo) { cerr << "Video query failed: " << SDL_GetError() << endl; SDL_Quit(); exit(1); } videoFlags = SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWPALETTE; if (videoInfo->hw_available) videoFlags |= SDL_HWSURFACE; else videoFlags |= SDL_SWSURFACE; if (videoInfo->blit_hw) videoFlags |= SDL_HWACCEL; SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); surface = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, videoFlags); if (!surface) { cerr << "Video mode set failed: " << SDL_GetError() << endl; SDL_Quit(); exit(1); } glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); const GLfloat ratio = static_cast<GLfloat>(WIDTH) / static_cast<GLfloat>(HEIGHT); glViewport(0, 0, WIDTH, HEIGHT); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, ratio, 0.25f, 100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if (Test_glReadPixels() != true) { SDL_Quit(); return 1; } SDL_Quit(); return 0; }