问题标签 [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.
android - gl_PointSize 在 Nvidia Shield 上无法正常工作
我注意到我无法在我的 OpenGL ES 3.0 android 应用程序中使用 gl_PointSize 更改顶点着色器中点的大小。最终我发现我必须启用 GL_PROGRAM_POINT_SIZE 即使这个枚举值没有在 gl 头文件中定义。所以我最终添加了 glEnable(0x8642);
现在一切正常,但这是一个错误吗?或者有什么原因我需要启用它。我知道我需要在 Windows 的兼容性上下文中执行此操作,但我认为在 Android 上我将使用纯 ES 3.0 上下文。也许我的 GL 上下文设置不正确?
java - 具有 OpenGL ES 3.1 上下文的 GLSurfaceView
我正在使用 OpenGL 开发 Android。我知道如何使用GLSurfaceView
及其自定义派生类来创建 OpenGL ES 2.0 上下文,方法如下GLSurfaceView
:
和 OpenGL ES 3.0 上下文:
如何为 OpenGL ES 3.1 创建上下文?
linux - OpenGL ES 3.0 GL_POINTS 不渲染任何东西
下面是一个最小的复制器:
顶点着色器:
片段着色器:
屏幕上什么都没有呈现,我glxinfo
可以在这个 pastebin中找到。当我将相同的纹理渲染到三角形上时,它可以工作。
这也是使用捕获的渲染循环apitrace
:
opengl - glEnableVertexAttribArray 修改什么对象的状态?
我想我理解 glEnableVertexAttribArray 的作用——它激活了程序的特定属性(如果我错了,请纠正我)。
我不明白的是哪个对象存储了这些信息。是程序对象吗?也就是说,如果我这样做:
然后再做:
是否会启用位置 0 的属性?
或者它是否修改了一些需要在每次绘制调用之前重置的全局状态?还是在修改 VAO 的状态?如果是这样,那么在没有 VAO 的 OpenGL ES 2.0 中呢?
ios - 在 IOS 上的 openGL ES 3 中加载统一 vec/mat 的问题
我正在用 IOS 上的 GPU 做重线性代数,所以我正在尝试 openGL ES 3.0。我从Bartosz Ciechanowski 的玩具代码开始计算一些一般的大乘小矩阵乘法。我将大的分割成向量,并使用一组统一矩阵来表示较小的矩阵。我已经设法输入和输出顶点着色器,但由于它看起来总是空的,所以无法正确获取统一矩阵。这是我所做的:
在顶点着色器中,我只是复制了我在统一向量中发送的内容:
在 ObjC 代码中,我将缓冲区内容声明为全局变量:
在我编译着色器并生成程序句柄的地方,我附加了缓冲区:
输出缓冲区只是读取全 0。只是为了证明其他一切正常,当我使用注释行时,我可以在转换反馈中得到正确的结果
所以我不得不怀疑我错过了统一向量的一些东西。有什么建议么?
android - opengles 3.0 RG8 RG16F 纹理
这几天我正在Android上开发一些图像处理程序。我想将一些字节和浮点数据放入纹理中。我这样做了。
我的着色器什么都不做。片段着色器代码是:
我用字节数据创建纹理(test_byte
)运行程序
我有 :
我用浮点数据创建纹理(test_float
)运行程序。创建的纹理glTexImage2D(GL_TEXTURE_2D, 0, GL_RG16F, 1, 4, 0, GL_RG,GL_FLOAT, test_float);
我有 :
为什么我在使用字节数据纹理时错过了 3,4 和 7,8?
任何帮助将不胜感激。
opengl-es-3.0 - 为什么来自 PBO 的 glReadPixel GL_RGB 出现错误 0x502 INVALD OPTION
我看见
format 指定返回像素值的格式;可接受的值为:
GL_ALPHA GL_RGB GL_RGBA RGBA 颜色分量从颜色缓冲区中读取。每个颜色分量都转换为浮点数,这样零强度映射到 0.0,全强度映射到 1.0。
然后丢弃不需要的数据。例如,GL_ALPHA 丢弃了红色、绿色和蓝色分量,而 GL_RGB 只丢弃了 alpha 分量。GL_LUMINANCE 将单分量值计算为红色、绿色和蓝色分量的总和,GL_LUMINANCE_ALPHA 也是如此,同时将 alpha 作为第二个值。最终值被限制在 [0, 1] 范围内。”
在https://www.khronos.org/opengles/sdk/1.1/docs/man/glReadPixels.xml
如果使用 GL_RGBA 效果很好。但如果我改变
glReadPixelsPBOJNI(0, 0, 宽度, 高度, GLES30.GL_RGBA, GLES30.GL_UNSIGNED_BYTE, 0);
至
glReadPixelsPBOJNI(0, 0, 宽度, 高度, GLES30.GL_RGB, GLES30.GL_UNSIGNED_BYTE, 0);
0x502 得到。这有什么问题?
ios - unexpected different sizes returned from glGetRenderbufferParameteriv in iOS
Hello I am writing an example OpenGLES app, if I setup openGL via the view's initWithCode:(NSCoder *) coder
method, the call of
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &_backingWidth);
returns 960x480 for iPad air.
But if I setup openGL in the view's -(void) layoutSubviews
method, it will return 2048x1536,
I can not understand why they return different. can any expert explain?
opengl-es - 具有可选属性的 GLSL 着色器
我正在尝试创建一个 übershader 来表示一些可能包含或不包含某些属性的波前数据,例如:
- 一个或多个对象可能包含
uv
坐标和纹理 - 一个或多个对象可能包含每个顶点的法线映射
- 一种或多种材质可能会使用不同的照明类型进行渲染,并包含用于凹凸贴图的纹理
等等。
现在,为此创建一个 übershader 可能是也可能不是一个好主意(我正在试验),但我面临的问题是某些属性已指定而有些则没有(缺少制服,例如未设置的纹理采样器是使用打开和关闭采样功能的布尔统一处理)。
在 GLSL v 3.00 中,当一个属性既 没有被分配(这意味着 no glEnableVertexAttribArray
,例如,但也没有缓冲区绑定/任何东西)并且没有在 GLSL 程序中用于读取(例如,我将使用制服boolean
转纹理查找关闭,当 UV 坐标丢失时,虽然我可能仍然在顶点和片段着色器之间插入坐标作为输入/输出,如下所示:
...)?
这是对 glsl 的合法使用,还是会遇到奇怪的兼容性问题(我正在为移动设备开发,正如 OpenGL ES3.0 标签所暗示的那样)?
我正在寻找第一手经验或权威来源,
谢谢!