Merge branch 'svn/trunk' r4326
This commit is contained in:
commit
6099ab60f3
3 changed files with 63 additions and 26 deletions
|
@ -97,8 +97,9 @@ PFNGLBUFFERDATAARBPROC glBufferDataARB = NULL;
|
|||
PFNGLMAPBUFFERARBPROC glMapBufferARB = NULL;
|
||||
PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB = NULL;
|
||||
|
||||
#ifndef GL_VERSION_2_0
|
||||
#define GL_VERSION_2_0 1
|
||||
/* Don't guard these with GL_VERSION_2_0 - Apple defines it but not these typedefs.
|
||||
* If they're already defined they should match these definitions, so no conflicts.
|
||||
*/
|
||||
typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);
|
||||
typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);
|
||||
typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);
|
||||
|
@ -113,13 +114,19 @@ typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLin
|
|||
typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);
|
||||
typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);
|
||||
typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);
|
||||
typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length);
|
||||
//Change to NP, as Khronos changes include guard :(
|
||||
typedef void (APIENTRYP PFNGLSHADERSOURCEPROC_NP) (GLuint shader, GLsizei count, const GLchar **string, const GLint *length);
|
||||
typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);
|
||||
typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);
|
||||
typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);
|
||||
typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
|
||||
#endif
|
||||
|
||||
/* Apple defines these functions in their GL header (as core functions)
|
||||
* so we can't use their names as function pointers. We can't link
|
||||
* directly as some platforms may not have them. So they get their own
|
||||
* namespace here to keep the official names but avoid collisions.
|
||||
*/
|
||||
namespace gl2 {
|
||||
PFNGLATTACHSHADERPROC glAttachShader = NULL;
|
||||
PFNGLCOMPILESHADERPROC glCompileShader = NULL;
|
||||
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
|
||||
|
@ -134,15 +141,35 @@ PFNGLGETSHADERIVPROC glGetShaderiv = NULL;
|
|||
PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog = NULL;
|
||||
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = NULL;
|
||||
PFNGLLINKPROGRAMPROC glLinkProgram = NULL;
|
||||
PFNGLSHADERSOURCEPROC glShaderSource = NULL;
|
||||
PFNGLSHADERSOURCEPROC_NP glShaderSource = NULL;
|
||||
PFNGLUNIFORM2FPROC glUniform2f = NULL;
|
||||
PFNGLUNIFORM1IPROC glUniform1i = NULL;
|
||||
PFNGLUSEPROGRAMPROC glUseProgram = NULL;
|
||||
PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer = NULL;
|
||||
}
|
||||
|
||||
#ifndef GL_SHADER_COMPILER
|
||||
#define GL_SHADER_COMPILER 0x8DFA
|
||||
#endif
|
||||
/* "using" is meant to hide identical names declared in outer scope
|
||||
* but is unreliable, so just redefine instead.
|
||||
*/
|
||||
#define glAttachShader gl2::glAttachShader
|
||||
#define glCompileShader gl2::glCompileShader
|
||||
#define glCreateProgram gl2::glCreateProgram
|
||||
#define glCreateShader gl2::glCreateShader
|
||||
#define glDeleteProgram gl2::glDeleteProgram
|
||||
#define glDeleteShader gl2::glDeleteShader
|
||||
#define glEnableVertexAttribArray gl2::glEnableVertexAttribArray
|
||||
#define glGetAttribLocation gl2::glGetAttribLocation
|
||||
#define glGetProgramiv gl2::glGetProgramiv
|
||||
#define glGetProgramInfoLog gl2::glGetProgramInfoLog
|
||||
#define glGetShaderiv gl2::glGetShaderiv
|
||||
#define glGetShaderInfoLog gl2::glGetShaderInfoLog
|
||||
#define glGetUniformLocation gl2::glGetUniformLocation
|
||||
#define glLinkProgram gl2::glLinkProgram
|
||||
#define glShaderSource gl2::glShaderSource
|
||||
#define glUniform2f gl2::glUniform2f
|
||||
#define glUniform1i gl2::glUniform1i
|
||||
#define glUseProgram gl2::glUseProgram
|
||||
#define glVertexAttribPointer gl2::glVertexAttribPointer
|
||||
|
||||
#endif // C_OPENGL
|
||||
|
||||
|
@ -709,7 +736,7 @@ static GLuint BuildShader ( GLenum type, const char *shaderSrc ) {
|
|||
return shader;
|
||||
}
|
||||
|
||||
static bool GFX_LoadGLShaders(const char *src, GLuint *vertex, GLuint *fragment) {
|
||||
static bool LoadGLShaders(const char *src, GLuint *vertex, GLuint *fragment) {
|
||||
GLuint s = BuildShader(GL_VERTEX_SHADER, src);
|
||||
if (s) {
|
||||
*vertex = s;
|
||||
|
@ -898,14 +925,14 @@ dosurface:
|
|||
SDL_GL_SetSwapInterval(sdl.desktop.vsync ? 1 : 0);
|
||||
|
||||
if (sdl.opengl.use_shader) {
|
||||
GLboolean t;
|
||||
// confirm current context supports shaders
|
||||
glGetBooleanv(GL_SHADER_COMPILER, &t);
|
||||
if (t) {
|
||||
GLuint prog=0;
|
||||
// reset error
|
||||
glGetError();
|
||||
glGetIntegerv(GL_CURRENT_PROGRAM, (GLint*)&prog);
|
||||
// if there was an error this context doesn't support shaders
|
||||
if (glGetError()==GL_NO_ERROR && (sdl.opengl.program_object==0 || prog!=sdl.opengl.program_object)) {
|
||||
// check if existing program is valid
|
||||
if (sdl.opengl.program_object) {
|
||||
// reset error
|
||||
glGetError();
|
||||
glUseProgram(sdl.opengl.program_object);
|
||||
if (glGetError() != GL_NO_ERROR) {
|
||||
// program is not usable (probably new context), purge it
|
||||
|
@ -918,11 +945,11 @@ dosurface:
|
|||
if (sdl.opengl.program_object == 0) {
|
||||
GLuint vertexShader, fragmentShader;
|
||||
const char *src = sdl.opengl.shader_src;
|
||||
if (src && !GFX_LoadGLShaders(src, &vertexShader, &fragmentShader)) {
|
||||
if (src && !LoadGLShaders(src, &vertexShader, &fragmentShader)) {
|
||||
LOG_MSG("SDL:OPENGL:Failed to compile shader, falling back to default");
|
||||
src = NULL;
|
||||
}
|
||||
if (src == NULL && !GFX_LoadGLShaders(shader_src_default, &vertexShader, &fragmentShader)) {
|
||||
if (src == NULL && !LoadGLShaders(shader_src_default, &vertexShader, &fragmentShader)) {
|
||||
LOG_MSG("SDL:OPENGL:Failed to compile default shader!");
|
||||
goto dosurface;
|
||||
}
|
||||
|
@ -954,7 +981,6 @@ dosurface:
|
|||
glGetProgramInfoLog(sdl.opengl.program_object, info_len, NULL, info_log.data());
|
||||
LOG_MSG("SDL:OPENGL:Error link program:\n %s", info_log.data());
|
||||
}
|
||||
|
||||
glDeleteProgram(sdl.opengl.program_object);
|
||||
sdl.opengl.program_object = 0;
|
||||
goto dosurface;
|
||||
|
@ -1092,7 +1118,7 @@ dosurface:
|
|||
if (sdl.opengl.pixel_buffer_object)
|
||||
retFlags |= GFX_HARDWARE;
|
||||
break;
|
||||
}//OPENGL
|
||||
}//OPENGL
|
||||
#endif //C_OPENGL
|
||||
default:
|
||||
goto dosurface;
|
||||
|
@ -1652,7 +1678,7 @@ static void GUI_StartUp(Section * sec) {
|
|||
glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)SDL_GL_GetProcAddress("glGetShaderInfoLog");
|
||||
glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)SDL_GL_GetProcAddress("glGetUniformLocation");
|
||||
glLinkProgram = (PFNGLLINKPROGRAMPROC)SDL_GL_GetProcAddress("glLinkProgram");
|
||||
glShaderSource = (PFNGLSHADERSOURCEPROC)SDL_GL_GetProcAddress("glShaderSource");
|
||||
glShaderSource = (PFNGLSHADERSOURCEPROC_NP)SDL_GL_GetProcAddress("glShaderSource");
|
||||
glUniform2f = (PFNGLUNIFORM2FPROC)SDL_GL_GetProcAddress("glUniform2f");
|
||||
glUniform1i = (PFNGLUNIFORM1IPROC)SDL_GL_GetProcAddress("glUniform1i");
|
||||
glUseProgram = (PFNGLUSEPROGRAMPROC)SDL_GL_GetProcAddress("glUseProgram");
|
||||
|
@ -2023,6 +2049,8 @@ void GFX_Events() {
|
|||
if ((ev.window.event == SDL_WINDOWEVENT_FOCUS_GAINED) || (ev.window.event == SDL_WINDOWEVENT_RESTORED) || (ev.window.event == SDL_WINDOWEVENT_EXPOSED)) {
|
||||
paused = false;
|
||||
GFX_SetTitle(-1,-1,false);
|
||||
SetPriority(sdl.priority.focus);
|
||||
CPU_Disable_SkipAutoAdjust();
|
||||
}
|
||||
|
||||
/* Now poke a "release ALT" command into the keyboard buffer
|
||||
|
|
|
@ -247,7 +247,7 @@ void JOYSTICK_Button(Bitu which,Bitu num,bool pressed) {
|
|||
}
|
||||
|
||||
void JOYSTICK_Move_X(Bitu which,float x) {
|
||||
if(which > 2) return;
|
||||
if (which > 1) return;
|
||||
if (stick[which].xpos == x) return;
|
||||
stick[which].xpos = x;
|
||||
stick[which].transformed = false;
|
||||
|
@ -256,7 +256,7 @@ void JOYSTICK_Move_X(Bitu which,float x) {
|
|||
}
|
||||
|
||||
void JOYSTICK_Move_Y(Bitu which,float y) {
|
||||
if(which > 2) return;
|
||||
if (which > 1) return;
|
||||
if (stick[which].ypos == y) return;
|
||||
stick[which].ypos = y;
|
||||
stick[which].transformed = false;
|
||||
|
|
|
@ -1371,8 +1371,13 @@ void VGA_SetupDrawing(Bitu /*val*/) {
|
|||
// fall-through
|
||||
case M_LIN32:
|
||||
width<<=3;
|
||||
if (vga.crtc.mode_control & 0x8)
|
||||
if (vga.crtc.mode_control & 0x8) {
|
||||
doublewidth = true;
|
||||
if (vga.mode == M_LIN32) {
|
||||
// vesa modes 10f/190/191/192
|
||||
aspect_ratio *= 2.0;
|
||||
}
|
||||
}
|
||||
/* Use HW mouse cursor drawer if enabled */
|
||||
VGA_ActivateHardwareCursor();
|
||||
break;
|
||||
|
@ -1382,6 +1387,10 @@ void VGA_SetupDrawing(Bitu /*val*/) {
|
|||
width<<=2;
|
||||
if ((vga.crtc.mode_control & 0x8) || (svgaCard == SVGA_S3Trio && (vga.s3.pll.cmd & 0x10)))
|
||||
doublewidth = true;
|
||||
else {
|
||||
// vesa modes 165/175
|
||||
aspect_ratio /= 2.0;
|
||||
}
|
||||
/* Use HW mouse cursor drawer if enabled */
|
||||
VGA_ActivateHardwareCursor();
|
||||
break;
|
||||
|
@ -1539,11 +1548,11 @@ void VGA_SetupDrawing(Bitu /*val*/) {
|
|||
vga.changes.frame = 0;
|
||||
vga.changes.writeMask = 1;
|
||||
#endif
|
||||
/*
|
||||
Cheap hack to just make all > 640x480 modes have 4:3 aspect ratio
|
||||
/*
|
||||
Cheap hack to just make all > 640x480 modes have square pixels
|
||||
*/
|
||||
if ( width >= 640 && height >= 480 ) {
|
||||
aspect_ratio = ((float)width / (float)height) * ( 3.0 / 4.0);
|
||||
aspect_ratio = 1.0;//((float)width / (float)height) * ( 3.0 / 4.0);
|
||||
}
|
||||
// LOG_MSG("ht %d vt %d ratio %f", htotal, vtotal, aspect_ratio );
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue