在我的iOS应用程序(针对iPad)中,我想使用非幂(NPT)纹理.我的GL_VERSION查询返回"OpenGL ES 2.0 APPLE".根据规范,它应该支持NPT纹理,但是一个简单的测试表明我需要在纹理显示之前将纹理大小调整为2 ^ N.
Apple不支持完整的ES 2.0规范吗?我在哪里可以找到不支持的文档?
我使用的是Xcode 4.3.2和iOS 5.1.
编辑:
仔细研究ES 2.0.25规范(第3.8.2节),可以发现NPOT可以满足几个条件.基本上如果我使用下面的设置,我可以加载NPOT纹理:
// use linear filetring
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
// clamp to edge
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)
我应该关闭它还是回答我自己的问题?
在unix的网络编程中,我总是在服务器用来侦听连接的套接字上设置SO_REUSEADDR选项.这基本上说可以在机器上的同一端口上打开另一个套接字.这在从崩溃中恢复并且套接字未正确关闭时非常有用 - 应用程序可以重新启动,它只需在同一端口上打开另一个套接字并继续监听.
我的问题是,旧套接字会发生什么?毫无疑问,仍将在旧套接字上接收所有数据/连接.它会被操作系统自动关闭吗?
我正在使用OpenGL ES 2.0,但我认为它也与非ES有关:如何知道在创建VBO时选择什么"用法"?
这个特殊的VBO将在完全更新之前使用1到4次,我不确定是否必须选择GL_STREAM_DRAW或GL_DYNAMIC_DRAW.
我试着用gcc4.7编译以下代码片段
vector<pair<int,char> > vp = {{1,'a'},{2,'b'}};
//For pair vector, it works like a charm.
vector<tuple<int,double,char> > vt = {{1,0.1,'a'},{2,4.2,'b'}};
Run Code Online (Sandbox Code Playgroud)
但是,对于元组的向量,编译器抱怨:
错误:从初始化列表转换为'std :: tuple'将使用显式构造函数'constexpr std :: tuple <> :: tuple(_UElements && ...)[with _UElements = {int,double,char}; =无效 _Elements = {int,double,char}]'
编译器溢出的错误信息对我来说是完全乱码,我不知道元组的构造函数是如何实现的,但我知道它们完全可以使用统一初始化(如:)tuple<int,float,char>{1,2.2,'X'},因此,我想知道问题是否存在我遇到的只是编译器的TODO或它是由C++ 11标准定义的东西.
任何回复将不胜感激!
点精灵是构建粒子系统的最佳选择吗?
新版本的OpenGL和最新图形卡的驱动程序中是否存在点精灵?或者我应该使用vbo和glsl吗?
我一直在Kubuntu上使用Genymotion Android模拟器,但最近我遇到了阻止它工作的Open GL错误.有趣的是,我有一个较旧的Galaxy Nexus 4.2.2模拟器图像工作正常(虽然它抱怨我启动时版本不匹配),但如果我尝试创建任何较新的图像,模拟器无法启动.当我检查logcat时,我看到以下错误:
I/SurfaceFlinger( 459): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
D/libEGL ( 459): loaded /system/lib/egl/libEGL_emulation.so
D/ ( 459): HostConnection::get() New Host Connection established 0xb890b898, tid 460
D/libEGL ( 459): loaded /system/lib/egl/libGLESv1_CM_emulation.so
D/libEGL ( 459): loaded /system/lib/egl/libGLESv2_emulation.so
E/setdpi ( 463): Setting DPI to 213
E/SurfaceFlinger( 459): hwcomposer module not found
W/SurfaceFlinger( 459): getting VSYNC period from fb HAL: 16666666
W/SurfaceFlinger( 459): no suitable EGLConfig found, trying without EGL_FRAMEBUFFER_TARGET_ANDROID
W/SurfaceFlinger( 459): no suitable EGLConfig found, trying …Run Code Online (Sandbox Code Playgroud) 我正在使用OpenGL API和GLUT在C++中开发一个图形应用程序.
为了添加光照,我在模型视图矩阵中进行了以下更改:
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
// Create light components.
GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8, 1.0f };
GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat position[] = { 0.0f, 0.0f, 0.0f, 1.0f };
// Assign created components to GL_LIGHT0.
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightfv(GL_LIGHT0, GL_POSITION, position);
Run Code Online (Sandbox Code Playgroud)
我认为照明在很大程度上起作用,但我的物体的颜色都消失了.我所看到的只是我整体身材的黑/白轮廓.
我想知道为什么会这样?
我正在尝试为FBO启用mutlisampling和alpha-to-coverage.使用默认的帧缓冲区,我所要做的就是调用glEnable(GL_MULTISAMPLE)和glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE).但是,我无法使用自己的FBO达到同样的效果.
我的目标:将场景绘制到FBO,就像使用上述属性绘制到默认帧缓冲区一样.从那里我希望能够将图像用作未来通过着色器的纹理.
这适用:制作没有多重采样/ alpha到覆盖的FBO的代码,1种颜色附件,1种深度附件:
// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,defaultColorAttachment0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,screenWidth,screenHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);
// Bind the texture to the FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, defaultColorAttachment0,0);
// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, screenWidth, screenHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, defaultDepthBuffer);
Run Code Online (Sandbox Code Playgroud)
这不起作用.试图制作多重采样FBO的代码:
// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, defaultColorAttachment0);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, screenWidth, screenHeight, GL_FALSE);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, defaultColorAttachment0,0);
// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, …Run Code Online (Sandbox Code Playgroud)