- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OpenGL 的新手,正在移植现有应用程序以使其在 iOS 中运行。现有的OpenGL代码如下:
glGenTextures(1, (GLuint*)&_colorTexID);
glGenTextures(1, (GLuint*)&_depthTexID);
glBindTexture(GL_TEXTURE_2D, _colorTexID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, colorFormat, colorType, getColorBuffer(_HRenderTarget));
glBindTexture(GL_TEXTURE_2D, _depthTexID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, width, height, 0, depthFormat, depthType, getDepthBuffer(_HRenderTarget));
GLint mode[2];
GLboolean stencilMode;
GLboolean depthTestEnabled;
glGetIntegerv(GL_POLYGON_MODE, mode);
glGetBooleanv(GL_STENCIL_TEST, &stencilMode);
glGetBooleanv(GL_DEPTH_TEST, &depthTestEnabled);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glCullFace(GL_BACK);
glDisable(GL_STENCIL_TEST);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, _colorTexID);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, _depthTexID);
glActiveTexture(GL_TEXTURE0);
glUseProgram(getGLProgramObject());
if (_depthTest)
{
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
}
else
{
glDisable(GL_DEPTH_TEST);
}
glEnable(GL_ALPHA_TEST);
glVertexAttrib4f(glGetAttribLocation(getGLProgramObject(), "color"), 1.f, 1.f, 1.f, _alpha);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f(1, -1);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(-1, 1);
glEnd();
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
glActiveTexture(GL_TEXTURE0);
glUseProgram(0);
// Restore states
glPolygonMode(GL_FRONT, mode[0]);
glPolygonMode(GL_BACK, mode[1]);
if (stencilMode) glEnable(GL_STENCIL_TEST); else glDisable(GL_STENCIL_TEST);
if (depthTestEnabled) glEnable(GL_DEPTH_TEST); else glDisable(GL_DEPTH_TEST);
我的 GL ES 更改只是替换了即时模式四边形渲染
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(-1, -1);
glTexCoord2f(1, 0); glVertex2f(1, -1);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(-1, 1);
glEnd();
与:
GLshort vtx1[] = {-1,-1, 1,-1, 1,1, -1,1 };
GLshort tex1[] = { 0,0, 1,0, 1,1, 0,1, };
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_SHORT, 0, &vtx1[0]);
glTexCoordPointer(2, GL_SHORT, 0, &tex1[0]);
glDrawArrays(GL_QUADS, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
GL_RGBA8
使用 GL_RGBA8_OES
,GL_R32F
使用 GL_R32F_EXT
,并且不使用 glPolygonMode
因为它不受支持。但似乎我错过了一些东西。它不会呈现并崩溃,导致错误 GPU 对硬件重启感到内疚。
我的着色器代码:
const GLcharARB* _udFragmentShader =
" \n" \
" uniform sampler2D udTexture; \n" \
" uniform sampler2D udDepth; \n" \
" void main (void) \n" \
" { \n" \
" vec4 frag = texture2D(udTexture,gl_TexCoord[0].st); \n" \
" if(frag.a < 0.5) discard; \n" \
" gl_FragColor = frag * gl_Color; \n" \
" gl_FragDepth = (texture2D(udDepth,gl_TexCoord[0].st).r * 0.5) + 0.5; \n" \
" } \n" \
" \n" \
"";
const GLcharARB* _udVertexShader =
" \n" \
" attribute vec4 color; \n" \
" void main(void) \n" \
" { \n" \
" gl_Position = gl_Vertex; \n" \
" gl_FrontColor = color; \n" \
" gl_TexCoord[0] = gl_MultiTexCoord0; \n" \
" } \n" \
" \n" \
"";
最佳答案
您正在尝试混合使用 OpenGL ES 1.x 和 ES 2.0。 ES 2.0 不是 ES 1.x 的扩展。 ES 2.0 是一个全新的 API 定义,与 ES 1.x 几乎没有共同之处。如果您查看官方规范文件 ( https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/api/gl.xml ),也可以确认这一点:
<feature api="gles1" name="GL_VERSION_ES_CM_1_0" number="1.0">
...
<feature api="gles2" name="GL_ES_VERSION_2_0" number="2.0">
...
<feature api="gles2" name="GL_ES_VERSION_3_0" number="3.0">
...
<feature api="gles2" name="GL_ES_VERSION_3_1" number="3.1">
...
可以看到 ES 3.0 和 3.1 被指定为 gles2
API 的扩展,而 ES 2.0 被指定为带有 gles1
的新 API。因此,它根本不向后兼容 ES 1.x。
这意味着您必须使用 ES 1.1 或 ES 2.0:
如果您坚持使用 ES 2.0(恕我直言,您应该这样做),您将不得不摆脱所有不再可用的调用。快速查看您的代码,这包括:
GL_ALPHA_TEST
:如果您确实需要,请在片段着色器中替换为 discard
。GL_QUADS
基本类型:替换为GL_TRIANGLES
、GL_TRIANGLE_STRIP
等glBegin()
等):替换为顶点数组/缓冲区和 glDrawArrays()
、glDrawElements()
。 glEnableClientState()
:替换为 glEnableVertexAttribArray()
。glVertexPointer()
, glTexCoordPointer()
:替换为 glVertexAttribPointer()
。理想情况下,您应该避免在使用 ES 2.0 时包含任何 ES 1.x header 。这将允许您在编译时看到大部分不兼容,因为 ES 2.0 中不可用的函数/枚举将不再定义,从而导致构建错误。
关于ios - OpenGL 到 GL ES 2.0 端口 : trouble in rendering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169788/
假设我有一个论坛,其中包含用户/管理员可以访问/管理的主题。 当用户访问它时,我首先会检查主题是否存在;在我设置一个标志后,告诉系统用户是否已访问过该主题。 这将是基本代码: 1 if(
我有一个基类 MessageHandler 和 2 个派生类,MessageHandler_CB 和 MessageHandler_DQ。 派生类重新定义了 handleMessage(...) 方法
我已经在我的 NOOBS 操作系统上安装了 v4l2loopback,但它不起作用。 我已经检查过是否安装了 v4l2loopback,它是。但是当我输入 sudo modprobe v4l2loop
我们正处于项目的最后一步,我们无法摆脱这个问题。 基本上,我们正在开发的页面是在视频中创建章节的表单。对于创建的每个章节,验证后都会创建一张小“卡片”。我们希望用户能够通过单击每个章节卡中显示的 X
我是 C# 新手。也许我没有正确地实现 IEquatable,因为我的类型的对象应该被认为是相同的,但不是。 类(class): class CompPoint : IComparable {
在我的代码顶部,我需要询问用户是否想玩游戏。使用字符串函数查看他们答案的第一个字母并将其变为小写。如果他们的答案 == "y"然后玩游戏。我需要帮助将 Yes 的第一个字母小写。
我正在尝试导出我的数据库。我尝试过通过电子邮件并分享它。 问题是我想导出数据库的当前状态(以及其中的所有信息)。 我已经尝试过这段代码: func exportDatabase(){ var
我在分层情况下遇到 getcomponentat 问题。我进行了很多研究,发现以下线程实际上是我需要的,但它对我不起作用。我在线程中下载了代码并且它可以工作但是当我在我的项目中实现它时它没有。我可能正
我有麻烦了。带标题:我不知从哪里得到了 8px 的 margin !我希望我的标题附加到覆盖所有顶部区域而没有边距。但是我只用 margin :-8px; 得到这个东西但是对于不同的屏幕我需要设置其他
我创建了 2 个页脚,第二个页脚使用 css position: absolute 但结果是,第一个页脚不再起作用。 结果是这样的: 最佳答案 请分享您的代码以供理解。 如果您使用的是 positio
我有一个新手问题: bool _isPalindrome(const string& str) { return _isPalindrome(str.begin(), str.end());
我正在尝试构建一个蒙德里安艺术创作器,它允许您创建任意数量的矩形,每个矩形的大小都是随机的。我能够创建随机大小,但我遇到的麻烦是让它创建两个以上的随机矩形。 import turtle import
谁能告诉我为什么以下内容不匹配: >>> re.search(r'(\d{2, 10})', '153') 这个匹配: >>> re.search(r'\d{3}', '153') 最佳答案 re模
我已经为主屏幕构建了一个小部件,并在我的 AppWidgetProvider 类中声明了一些变量。这些变量是整数和 boolean 值。 我遇到的问题(它基本上是一个 Java 编程问题)是我分配给变
我的内存有问题。我不明白为什么当我的程序长时间运行时 Go 使用越来越多的内存(从不释放它)。 第一次分配后,程序使用了将近 9 MB 的内存。然后在 12 小时后,它开始以指数方式使用更多内存,直到
当我使用 g++ 编译以下代码时 class A {}; void foo(A&) {} int main() { foo(A()); return 0; } 我收到以下错误消息: > g++
我正在尝试在我的应用程序中的 iPhone 屏幕上拖动 UIImageView。 目前我设置的拖动功能很好,拖动图像确实可以在屏幕上移动它,问题是你不必拖动 ImageView 来移动它,你也可以在屏
我无法解释这种行为: 有时,我的图表会显示带有大量小数的轴的第一个或最后一个标签。 在我的图表选项中,yAxis 如下所示: yAxis : [{ alternateGridColor: "
我的 update() 函数遇到问题。在这里,在 svg.append('rect') 中,我有 .on('click'),我只需更改数据,然后运行 update(). 为什么这不起作用?我该如何
自从我切换到最近的 emacs 版本 (23.2) 附带的 CEDET 后,CEDET 不再可靠地工作。例如,我无法再重新生成 EDE 项目。 环顾四周后,似乎压缩包中缺少所有 CEDET 模板。有谁
我是一名优秀的程序员,十分优秀!