Page 1 of 1

GZDOOM GL init code cleanup (Linux testing needed)

Posted: Sun Aug 18, 2013 13:24
by Graf Zahl
I cleaned up the GL init code today. The old version had the Win32 and SDL code completely mixed together so I cleanly separated everything into the Video interface classes where it belongs.

However, I can't test the SDL side myself and therefore cannot guarantee that it still compiles, so I'd appreciate if someone with access to a Linux system could check and fix it

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Sun Aug 18, 2013 15:53
by Edward-san
Now I saw this thread, I already posted a crash report here.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Sun Aug 18, 2013 17:25
by Graf Zahl
I expected some issues, that's why I asked for help. I can't do anything with the crash log because I do not have a Linux machine.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Mon Aug 19, 2013 0:14
by Edward-san
Ok, we have two things:
1) in sdlglvideo.cpp, line 318: I suppose that after printing "R_OPENGL: Failed to initialize stencil buffer! Reverting to software mode...\n" it should return false.
2) from what could I see, in the SDLGLFB constructor, in the same file, line 340, you call:

Code: Select all

if (!static_cast<SDLGLVideo*>(Video)->InitHardware(false, localmultisample))
before calling: "SDL_SetVideoMode". But inside the 'InitHardware', you inserted this in the last commit:

Code: Select all

SDL_GL_GetAttribute( SDL_GL_STENCIL_SIZE, &value );
which was the one to crash.

I managed to fix the issue by moving "SDL_SetVideoMode" above the "InitHardware" call, but I believe this is even more wrong.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Mon Aug 19, 2013 7:01
by Graf Zahl
Ugh...

Is SDL stupid or what? I think in that case I just remove the SDL_GL_GetAttribute call that's the cause of the crash.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Tue Sep 03, 2013 19:35
by Edward-san
I cannot compile latest changes, because you removed this snippet:

Code: Select all

#ifndef PFNGLMULTITEXCOORD2FPROC
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);
#endif
#ifndef PFNGLMULTITEXCOORD2FVPROC
typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);
#endif 

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Tue Sep 03, 2013 21:15
by Graf Zahl
I don't understand why it is needed. Those definitions are present in glext.h as available on www.opengl.org so there shouldn't be any need to redefine them. They were wrong anyway because you can't
#ifdef for a typedef.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Tue Sep 03, 2013 21:41
by Edward-san
Because Mesa 9.x (the version which comes from recent linux distros) messed up with the glext.h headers. See for details here.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Fri Oct 25, 2013 10:59
by GuntherDW
I'm trying to see where it comes from, but on my Gentoo box it refuses to compile with these changes.

The mesa version on my box (which is used for GL.h ?) is 9.2.1.

[spoiler]

Code: Select all

Scanning dependencies of target zdoom
[ 36%] Building CXX object src/CMakeFiles/zdoom.dir/autostart.o
[ 36%] Building C object src/CMakeFiles/zdoom.dir/sdl/crashcatcher.o
[ 36%] Building CXX object src/CMakeFiles/zdoom.dir/sdl/hardware.o
In file included from /GuntherDW/src/git/tmp/gzdoom/src/./gl/system/gl_system.h:77:0,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/sdlglvideo.h:7,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/hardware.cpp:50:
/GuntherDW/src/git/tmp/gzdoom/src/./gl/api/gl_api.h:10:33: error: ‘void (* glBlendEquation)(GLenum)’ redeclared as different kind of symbol
In file included from /GuntherDW/src/git/tmp/gzdoom/src/./gl/system/gl_system.h:73:0,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/sdlglvideo.h:7,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/hardware.cpp:50:
/usr/include/GL/gl.h:1661:23: error: previous declaration of ‘void glBlendEquation(GLenum)’
In file included from /GuntherDW/src/git/tmp/gzdoom/src/./gl/system/gl_system.h:77:0,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/sdlglvideo.h:7,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/hardware.cpp:50:
/GuntherDW/src/git/tmp/gzdoom/src/./gl/api/gl_api.h:70:33: error: ‘void (* glActiveTexture)(GLenum)’ redeclared as different kind of symbol
In file included from /GuntherDW/src/git/tmp/gzdoom/src/./gl/system/gl_system.h:73:0,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/sdlglvideo.h:7,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/hardware.cpp:50:
/usr/include/GL/gl.h:1853:23: error: previous declaration of ‘void glActiveTexture(GLenum)’
In file included from /GuntherDW/src/git/tmp/gzdoom/src/./gl/system/gl_system.h:77:0,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/sdlglvideo.h:7,
                 from /GuntherDW/src/git/tmp/gzdoom/src/sdl/hardware.cpp:50:
/GuntherDW/src/git/tmp/gzdoom/src/./gl/api/gl_api.h:71:10: error: ‘PFNGLMULTITEXCOORD2FPROC’ does not name a type
/GuntherDW/src/git/tmp/gzdoom/src/./gl/api/gl_api.h:72:10: error: ‘PFNGLMULTITEXCOORD2FVPROC’ does not name a type
make[2]: *** [src/CMakeFiles/zdoom.dir/sdl/hardware.o] Error 1
make[1]: *** [src/CMakeFiles/zdoom.dir/all] Error 2
make: *** [all] Error 2
GL.h from MESA

Code: Select all

__EXTERN PFNGLBLENDEQUATIONPROC glBlendEquation;
GLAPI void GLAPIENTRY glBlendEquation( GLenum mode );

__EXTERN PFNGLACTIVETEXTUREPROC glActiveTexture;
GLAPI void GLAPIENTRY glActiveTexture( GLenum texture );


GL.h (and declaration from gzdoom)

Code: Select all

__EXTERN PFNGLBLENDEQUATIONPROC glBlendEquation;
GLAPI void APIENTRY glBlendEquation (GLenum mode); (APIENTRY -> GLAPIENTRY)

__EXTERN PFNGLACTIVETEXTUREPROC glActiveTexture;
GLAPI void APIENTRY glActiveTexture (GLenum texture); (again with the APIENTRY -> GLAPIENTRY)
haha, after commenting out a bunch, and adding http://zandronum.com/forum/showthread.php?tid=237 i got a bit further, but now it just crashes on another file :p)

Code: Select all

[ 35%] Building CXX object src/CMakeFiles/zdoom.dir/gl/system/gl_interface.o
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp: In function ‘void InitContext()’:
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:121:20: error: assignment of function ‘void glBlendEquation(GLenum)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:121:20: error: cannot convert ‘void(GLenum) {aka void(unsigned int)}’ to ‘void(GLenum) {aka void(unsigned int)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp: In function ‘void gl_LoadExtensions()’:
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:156:44: error: assignment of function ‘void glBlendEquation(GLenum)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:156:44: error: cannot convert ‘PFNGLBLENDEQUATIONPROC {aka void (*)(unsigned int)}’ to ‘void(GLenum) {aka void(unsigned int)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:158:7: warning: the address of ‘void glBlendEquation(GLenum)’ will always evaluate as ‘true’ [-Waddress]
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:158:66: error: assignment of function ‘void glBlendEquation(GLenum)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:158:66: error: cannot convert ‘PFNGLBLENDEQUATIONPROC {aka void (*)(unsigned int)}’ to ‘void(GLenum) {aka void(unsigned int)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:160:7: warning: the address of ‘void glBlendEquation(GLenum)’ will always evaluate as ‘true’ [-Waddress]
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:160:42: error: assignment of function ‘void glBlendEquation(GLenum)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:160:42: error: cannot convert ‘void(GLenum) {aka void(unsigned int)}’ to ‘void(GLenum) {aka void(unsigned int)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:322:44: error: assignment of function ‘void glActiveTexture(GLenum)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:322:44: error: cannot convert ‘PFNGLACTIVETEXTUREPROC {aka void (*)(unsigned int)}’ to ‘void(GLenum) {aka void(unsigned int)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:323:49: error: assignment of function ‘void glMultiTexCoord2f(GLenum, GLfloat, GLfloat)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:323:49: error: cannot convert ‘PFNGLMULTITEXCOORD2FPROC {aka void (*)(unsigned int, float, float)}’ to ‘void(GLenum, GLfloat, GLfloat) {aka void(unsigned int, float, float)}’ in assignment
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:324:51: error: assignment of function ‘void glMultiTexCoord2fv(GLenum, const GLfloat*)’
/GuntherDW/src/git/gzdoom/src/gl/system/gl_interface.cpp:324:51: error: cannot convert ‘PFNGLMULTITEXCOORD2FVPROC {aka void (*)(unsigned int, const float*)}’ to ‘void(GLenum, const GLfloat*) {aka void(unsigned int, const float*)}’ in assignment
make[2]: *** [src/CMakeFiles/zdoom.dir/gl/system/gl_interface.o] Error 1
make[1]: *** [src/CMakeFiles/zdoom.dir/all] Error 2
make: *** [all] Error 2

Code: Select all

gcc --version
gcc (Gentoo 4.7.3-r1 p1.3, pie-0.5.5) 4.7.3

x11-drivers/nvidia-drivers version 331.13
kernel 3.11.6 (Linux lisa 3.11.6-gentoo #1 SMP PREEMPT Mon Oct 21 21:06:42 CEST 2013 x86_64 AMD Phenom(tm) II X4 955 Processor AuthenticAMD GNU/Linux)
GPU : Nvidia GTX 470 (from ASUS)

I'm not so sure about the "PFNGLMULTITEXCOORD2FPROC" and "PFNGLMULTITEXCOORD2FVPROC" error yet though...[/spoiler]


Gah, I've been doing high(er) level languages for the last couple of years. I'm way too rusty in C :P.

Re: GZDOOM GL init code cleanup (Linux testing needed)

Posted: Sun Oct 27, 2013 8:10
by Graf Zahl
Yeah, someone needs to fix it. I can't do it because I can't test it.