OpenGL 版本问题
OpenGL version issues
我正在使用OpenGL,但我使用的版本遇到了一些问题。当我使用 glGetString(GL_VERSION)
检查我的版本时,我得到"4.2.0 - Build 10.18.10.3574"。我有以下问题:
-
在一种方法中,我使用固定管道进行渲染,但我知道对固定管道的支持已从 OpenGL 3.1 中删除,那么我的代码如何使用 4.2?我正在使用像
glTranslatef()
、glMatrixMode(GL_PROJECTION)
这样的 API。我认为这些都已弃用,仅适用于 OpenGL 1.1。那么,当我将上下文字符串作为 OpenGL 4.2 获取时,代码是如何工作的呢?我想我一定在使用 OpenGL 1.1,但是为什么上下文版本是 4.2? -
当我使用着色器时,我使用以下代码创建 3.1 或更高版本的上下文。我使用的着色器是与OpenGL 2.0兼容的旧着色器,并且具有"属性","变化"等关键字,并且不应与OpenGL 3.1或更高版本一起使用。我应该需要将我的着色器更新到 OpenGLSL 3.1,例如使用"in"、"out"等。还有一些不推荐使用的东西,如
GL_LINE_SMOOTH_HINT
、glMatrixMode(GL_PROJECTION)
。我认为这些东西已经从OpenGL 3.0中弃用了。那么这些东西是如何与 GL 上下文 3.1 及更高版本一起使用的呢?
用于创建上下文 3.1 或更高版本的代码
if ( 0 == (m_tempContext = ::wglCreateContext( m_pDC->GetSafeHdc() ) ) )
{
AfxMessageBox(_T("wglCreateContext failed."));
return FALSE;
}
if ( FALSE == ::wglMakeCurrent( m_pDC->GetSafeHdc(), m_tempContext ) )
{
AfxMessageBox(_T("wglMakeCurrent failed."));
return FALSE;
}
int attribs[] =
{
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
WGL_CONTEXT_MINOR_VERSION_ARB, 1,
WGL_CONTEXT_FLAGS_ARB, 0,
0
};
if(wglewIsSupported("WGL_ARB_create_context") == 1)
{
m_hRC = wglCreateContextAttribsARB(m_pDC->GetSafeHdc() ,0, attribs);
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m_tempContext);
wglMakeCurrent( m_pDC->GetSafeHdc(), m_hRC);
}
我正在使用的着色器之一
const GLchar* vertexShaderCode =
"attribute vec4 a_Position; n"
"attribute vec2 a_TexCoordinate; n"
"uniform mat4 u_MVPMatrix; n"
"varying vec2 v_TexCoordinate; n"
"void main() n"
"{ n"
" gl_Position = u_MVPMatrix * a_Position; n"
" v_TexCoordinate = a_TexCoordinate; n"
"} n";
const GLchar* fragmentShaderCode =
"#extension GL_OES_standard_derivatives : enable n"
"#ifdef GL_ES n"
"precision highp float; n"
"#endif n"
"varying vec2 v_TexCoordinate; n"
"uniform sampler2D u_Texture; n"
"uniform vec4 u_Color; n"
"uniform float u_InsideCutoff; n"
"uniform float u_OutsideCutoff; n"
"uniform float u_TextureSize; n"
"void main() n"
"{ n"
" vec4 distance = texture2D(u_Texture, v_TexCoordinate); n"
" vec3 color; n"
" float ic; n"
" float oc; n"
" float alpha; n"
" vec4 duvdxy = vec4(dFdx(v_TexCoordinate), dFdy(v_TexCoordinate)); n"
" float pixSize = length(u_TextureSize*duvdxy); n"
" ic = 0.5 + u_InsideCutoff*pixSize; n"
" oc = 0.5 + u_OutsideCutoff*pixSize; n"
" alpha = (clamp(distance.r,oc,ic) - oc)/(ic-oc); n"
" alpha *= u_Color.a; n"
" color = u_Color.rgb; n"
" gl_FragColor = vec4(color, alpha); n"
"} n";
基本上,我需要更新我的着色器和其他代码以使用 OpenGL 3.1 和更高的上下文。我已经与OpenGL失去联系一段时间了。很抱歉,如果它太幼稚的问题
OpenGL 3.1确实删除了以前弃用的功能。但是,3.1 还引入了 ARB_compatibility
扩展,这有效地将其全部恢复。如果您要求版本 3.1,您的实现将决定是否也可以使用已删除的功能。
对于版本 3.2 或更高版本,OpenGL 分为核心配置文件和兼容性配置文件。如果要与 wgl/glXCreateContextAttribsARB
的兼容性配置文件,则必须通过将 CONTEXT_CORE_PROFILE_BIT_ARB
设置为 CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB
来显式请求它。否则,当您将 ARB_create_context_attrib 用于 3.2 或更高版本时,将假定核心配置文件。
请注意,如果使用 wglCreateContext
,您将始终获得兼容性配置文件(或在核心/兼容性区别之前获得 OpenGL 版本)。
- python 和 swig 版本兼容性问题
- 使用不同版本的 gcc 和 g++ 进行编译时出现问题
- Xcode(版本9.2(9C40B)):试图包括Boost时C 语义和链接器问题
- 将词法分析器字符串累加器移植到新版本的 Quex 时出现问题
- 将GCC版本升级到发行版附带的版本以外的版本是否有任何问题
- 在发布版本中删除类指针会导致内存问题
- Linux 中 gcc 4.3 版本的编译问题
- 具有状态的Microsoft编译器版本19.16.27024.1的问题
- 外部库Boost版本问题
- 将早期 MSVC 版本生成的代码重新生成为较新版本时可能遇到的问题
- gcc 4.8或更早版本对正则表达式有问题吗
- 提升链接问题 - 多个版本
- OpenGL 版本问题
- 如何在编译C++代码时解决一些版本控制问题
- C++STL版本控制问题+Boost
- 避免DLL版本控制问题
- Visual Studio 版本中的 Math 函数问题
- NDIS 版本和 Windows 版本之间的兼容性问题
- 更改了默认的GCC版本,现在编译问题
- 在发布版本中面临createFile2 API的问题