问题标签 [opengl-es-3.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - glMapBufferRange 在Android中返回全零
我无法从使用 glMapBufferRange 映射的缓冲区中读取数据
如果我只是将一些数据放入缓冲区
在GL中生成一个Array Buffer并用数据填充它
当我使用映射缓冲区glMapBufferRange
并读取结果时
logcat 读取全零
没有产生其他错误,我不确定还有什么要检查的。我已经尝试GLES30.glCopyBufferSubData(GLES30.GL_ARRAY_BUFFER, GLES30.GL_COPY_READ_BUFFER, 0, 0, bufferLength);
映射 GL_COPY_READ_BUFFER 并得到相同的结果。
我正在支持 OpenGL ES 3.1 的 Nexus 6 上进行测试,因此应该存在此功能。
这个问题建议删除glfw中的OPENGL_FORWARD_COMPAT提示,在MyGLSurfaceView中是否需要发生类似的事情?
android - 如何使用 glReadPixels 获取浮点值?【安卓NDK es3.0】
C++代码:
现在我想读回“2.22”的值,但现在我得到的是一些长浮点值。(输出就像-188856716075009999660373357998301511680.000000,不是我想要的)。
我也尝试使用 GLubyte 作为结果数组的类型,并得到了颜色值(result[0] 是 R 值,result[1] 是 G 值,result[2] 是 B 值,result[3] 是 A 值),其中不是我想要的。
问题:
- 由于类型是 GL_UNSIGNED_BYTE,我应该使用 GLubyte 作为我的数组类型吗?
- 如何通过 glReadPixels 准确获取 2.22?
- GL_FLOAT 可以是 GLES 中 glReadPixels 的类型吗?
ios - IOS:OpenGL ES 2.0 与 3.0 中动态分支着色器的性能
我有一个基于 OpenGL ES 3.0 的 IOS 应用程序,我将把它移植到 ES 2.0。它包含带有一些昂贵的着色器,我猜,循环和 ifs。尽管该应用程序在支持 OpenGL ES 3.0 的设备上正常运行,但我不确定它是否会在 ES 2.0 设备(我没有)上运行良好。所以我想知道与较新的相比,较旧的 IOS 设备处理动态分支结构有多好?有没有人看过一些相关的基准?
opengl-es - 纹理sampler2d查找GLSL中的纹理坐标P是什么
我一直在查看OpenGLSL ES 3.0 Spec,但我找不到任何关于内置函数如何texture(sampler, p)
定义 P 的信息。我知道它是一个vec2
.
它是 0.0 到 1.0 之间的归一化浮点数,定义了从左上角到按钮右侧的缩放器吗?
还是像函数一样从 0 到尺寸减 1 的纹素查找texelFetch()
?
或者它是否更复杂并以某种方式在纹理属性中定义?这里它指出“纹理坐标可以被归一化或在纹素空间中。” 但我持怀疑态度,因为我没有看到任何将纹理设置为标准化的地方。
visual-studio - 带有 CMake 错误的 OpenGL ES 3.0
为了打开教科书中提供的示例,我从本书的网站 opengl-book.com 下载了示例。
说明说:将 CMake 指向该文件夹,VS 2013 应该从那里获取它。但是,我在 CMake 上收到错误消息。错误说:“配置过程出错,文件可能无效”。
CMake 错误:源目录“E:/OpenGL ES/opengles3-book”似乎不包含 CMakeLists.txt。指定 --help 使用,或按 CMake GUI 上的帮助按钮。
我在这里缺少什么步骤?
android - 为每个片段运行顶点着色器以进行变换反馈
如果我正确理解这一点,顶点着色器只会运行与顶点属性一样多的次数。然后片段着色器填充每个片段运行一次的纹理。
即如果我有四个顶点来绘制纹理图像,顶点着色器将只运行四次,或者六次来绘制两个三角形,没关系。
但是在片段着色器运行之前,扫描转换会计算需要多少片段。假设正方形覆盖 100x100 图像,计算 => 10,000 个片段。
现在我有一个片段着色器,可以根据每个片段的位置计算 julia 分形。我想将该计算移至顶点着色器以利用变换反馈。有没有办法从程序中获取纹素或碎片的数量?或者也许是双顶点着色器设置?
ios - 为什么这个 OpenGL ES 数组实例化示例不起作用?
我正在尝试遵循 Apple 的 OpenGL ES Programming Guide 部分中关于实例化绘图的建议:Use Instanced Drawing to Minimize Draw Calls。我从 XCode 为使用 OpenGL 和 Swift 的游戏应用程序生成的示例项目开始,并将其转换为 OpenGL ES 3.0,添加一些实例化绘图来复制立方体。
当我使用该gl_InstanceID
技术并简单地从中生成偏移量时,这可以正常工作。但是当我尝试使用“实例化数组”技术通过缓冲区传递数据时,我没有看到任何结果。
我更新的顶点着色器如下所示:
在我的 setupGL() 方法中,我添加了以下内容:
以及一些简单的实例偏移数据:
我使用与实例 id 技术相同的方式进行绘制:
但它似乎没有任何效果。我只得到了单个立方体,如果我删除缓冲区设置,它甚至似乎都不会失败,所以我怀疑我的设置丢失了一些东西。
编辑:通过从 init 中删除两条虚假行来修复代码。
android - OpenGL ES对纹理存储的无效操作
我正在 OpenGL ES 3 中尝试使用数组纹理。我正在尝试将不同的纹理渲染到我已经批量渲染的不同立方体上。但立方体只显示为黑色。
我查看了 Logcat 消息并将问题范围缩小到我调用 glTexStorage3D 的时间。这是我收到的消息:
08-14 10:24:00.332 17416-17429/? W/Adreno-ES20: core_glTexStorage3D:265: GL_INVALID_OPERATION
根据文档,错误发生在
如果默认纹理对象当前绑定到目标,则会生成 GL_INVALID_OPERATION。
如果当前绑定到目标的纹理对象已经将 GL_TEXTURE_IMMUTABLE_FORMAT 设置为 GL_TRUE,则会生成 GL_INVALID_OPERATION。
如果目标是 GL_TEXTURE_2D_ARRAY 并且级别大于 ⌊log2(max(width, height))⌋+1,则生成 GL_INVALID_OPERATION。
我检查了这些条件并打印到 logcat:
08-14 10:24:00.332 17416-17429/? D/a﹕immutable is gl false
08-14 10:24:00.332 17416-17429/? D/a:纹理绑定二维数组:0
08-14 10:24:00.332 17416-17429/? D/a:绑定方法后的纹理绑定二维数组:1
08-14 10:24:00.332 17416-17429/? D/a:绑定后不可变是gl false
08-14 10:24:00.332 17416-17429/? W/Adreno-ES20::GL_INVALID_OPERATION
根据日志,前两个条件不匹配。我传递的宽度、高度和级别都是 1,所以第三个条件也不应该匹配。
是什么导致了无效操作错误?另外,无效操作错误是我的黑色纹理的原因,还是不相关?
这是我加载数组纹理的方式:
opengl - 什么是 OpenGL/OpenGL ES 中的绑定点?
我正在学习 OpenGL/ES。我不清楚什么是绑定点。我查看了 OpenGL 文档,也搜索了 Internet,但找不到可以很好地解释绑定点的内容。
这是我所说的绑定点的一个例子。
无效glUniformBlockBinding(GLuint程序,GLuint uniformBlockIndex,GLuint uniformBlockBinding);
如果您能解释什么是绑定点、如何使用它等,我将不胜感激。
谢谢你。