diff --git a/panda/src/display/graphicsStateGuardian.h b/panda/src/display/graphicsStateGuardian.h index d9d11f15c8..785d6babc3 100644 --- a/panda/src/display/graphicsStateGuardian.h +++ b/panda/src/display/graphicsStateGuardian.h @@ -75,14 +75,14 @@ public: PUBLISHED: - enum ShaderModel - { + enum ShaderModel { SM_00, SM_11, SM_20, SM_2X, SM_30, SM_40, + SM_50, }; INLINE void release_all(); diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx index 96bdb0e446..8e7e3f8bd6 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx @@ -2352,9 +2352,12 @@ reset() { _shader_model = SM_30; break; case 4: - default: _shader_model = SM_40; break; + case 5: + default: + _shader_model = SM_50; + break; } _auto_detect_shader_model = _shader_model; @@ -2382,8 +2385,8 @@ reset() { CGprofile vertex_profile; CGprofile pixel_profile; - vertex_profile = cgD3D9GetLatestVertexProfile( ); - pixel_profile = cgD3D9GetLatestPixelProfile( ); + vertex_profile = cgD3D9GetLatestVertexProfile(); + pixel_profile = cgD3D9GetLatestPixelProfile(); const char *vertex_profile_str = cgGetProfileString(vertex_profile); diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index 03af39bfeb..6317310d17 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -1714,38 +1714,44 @@ reset() { report_my_gl_errors(); void gl_set_stencil_functions (StencilRenderStates *stencil_render_states); - gl_set_stencil_functions (_stencil_render_states); + gl_set_stencil_functions(_stencil_render_states); #if defined(HAVE_CG) && !defined(OPENGLES) - typedef struct - { + typedef struct { CGprofile cg_profile; int shader_model; - } - CG_PROFILE_TO_SHADER_MODEL; + } CG_PROFILE_TO_SHADER_MODEL; + + static CG_PROFILE_TO_SHADER_MODEL cg_profile_to_shader_model_array[] = { + // gp5fp - OpenGL fragment profile for GeForce 400 Series and up + CG_PROFILE_GP5FP, + SM_50, + + // gp4fp - OpenGL fragment profile for G8x (GeForce 8xxx and up) + CG_PROFILE_GP4FP, + SM_40, - static CG_PROFILE_TO_SHADER_MODEL cg_profile_to_shader_model_array [ ] = { // fp40 - OpenGL fragment profile for NV4x (GeForce 6xxx and 7xxx // Series, NV4x-based Quadro FX, etc.) CG_PROFILE_FP40, SM_30, - + // fp30 - OpenGL fragment profile for NV3x (GeForce FX, Quadro FX, etc.) CG_PROFILE_FP30, SM_2X, - + // This OpenGL profile corresponds to the per-fragment // functionality introduced by GeForce FX and other DirectX 9 // GPUs. CG_PROFILE_ARBFP1, SM_20, - + // fp20 - OpenGL fragment profile for NV2x (GeForce3, GeForce4 Ti, // Quadro DCC, etc.) CG_PROFILE_FP20, SM_11, - + // no shader support CG_PROFILE_UNKNOWN, SM_00, @@ -1756,9 +1762,9 @@ reset() { index = 0; cg_profile_to_shader_model = cg_profile_to_shader_model_array; - while (cg_profile_to_shader_model -> shader_model != SM_00) { - if (cgGLIsProfileSupported(cg_profile_to_shader_model -> cg_profile)) { - _shader_model = cg_profile_to_shader_model -> shader_model; + while (cg_profile_to_shader_model->shader_model != SM_00) { + if (cgGLIsProfileSupported(cg_profile_to_shader_model->cg_profile)) { + _shader_model = cg_profile_to_shader_model->shader_model; break; } cg_profile_to_shader_model++; @@ -1769,16 +1775,16 @@ reset() { GraphicsPipe *pipe; DisplayInformation *display_information; - pipe = this -> get_pipe ( ); + pipe = this->get_pipe(); if (pipe) { - display_information = pipe -> get_display_information ( ); + display_information = pipe->get_display_information (); if (display_information) { - if (display_information -> get_shader_model ( ) > _shader_model) { - _shader_model = display_information -> get_shader_model ( ); + if (display_information->get_shader_model() > _shader_model) { + _shader_model = display_information->get_shader_model(); } } } - } + } _auto_detect_shader_model = _shader_model; CGprofile vertex_profile;