[√]glGetUniformLocation返回值的问题

简介: [√]glGetUniformLocation返回值的问题

OpenGL shader对uniform的数量是有限制的,可以通过以下几个属性获取对应的限制:

GL_MAX_UNIFORM_BLOCK_SIZE
GL_MAX_GEOMETRY_UNIFORM_BLOCKS 
GL_MAX_VERTEX_UNIFORM_BLOCKS
GL_MAX_FRAGMENT_UNIFORM_BLOCKS
GL_MAX_UNIFORM_BLOCK_SIZE # 缓冲区的可用存储空间也有限制

但是我发现上边的这几个属性在gles2中并没有,因为项目使用的ndk r15c

Android NDK与OpenGL ES的对应关系如下:

  • Android NDK r20及更早版本对应OpenGL ES 2.0。
  • Android NDK r21及以后的版本对应OpenGL ES 3.0及更高版本。

那么很确定就是OpenGL es2了,又找到其他的几个属性:

属性 Android
最大支持的纹理图像单元数,可用于从顶点着色器和片段处理器组合访问纹理贴图 _MAX_COMBINED_TEXTURE_IMAGE_UNITS
支持的最大纹理图像单元,可用于从片段着色器访问纹理贴图。 GL_MAX_TEXTURE_IMAGE_UNITS
最大支持的纹理图像单元,可用于从顶点着色器访问纹理贴图 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS

实际运行过程中发现

GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 96
GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: 16
GL_MAX_TEXTURE_IMAGE_UNITS: 16
GL_MAX_FRAGMENT_UNIFORM_VECTORS: 4096

glGetUniformLocation返回-1才是找不到,因为在shader中我们可以手动指定location,并且可以指定为0,所以这里也能反应出来0代表的不是找不到。

layout(location = 0) uniform mat4 projectionMatrix;

layout关键字在OpenGL中用于指定着色器变量的布局属性。它通常与输入(顶点着色器)和输出(片段着色器)变量一起使用,并提供有关如何将数据传递给着色器的额外信息。

之前一直欢迎shader有dead code,或者shader没有use,或者glGetError报错了,实际上这写点都没有问题。

目录
相关文章
|
5月前
|
Android开发
Android Studio: 解决Gradle sync failed 错误
本文介绍了解决Android Studio中出现的Gradle同步失败错误的步骤,包括从`gradle-wrapper.properties`文件中获取Gradle的下载链接,手动下载Gradle压缩包,并替换默认下载路径中的临时文件,然后重新触发Android Studio的"Try Again"来完成同步。
1946 0
Android Studio: 解决Gradle sync failed 错误
|
7月前
Flutter: Unsupported value: false/true
Flutter: Unsupported value: false/true
32 0
|
8月前
|
存储 Android开发
Android 高版本 packageManager.getPackageArchiveInfo 总是返回null
Android 高版本 packageManager.getPackageArchiveInfo 总是返回null
312 1
|
XML Android开发 数据格式
Android Studio报Element XXXX must be declared的解决方法
Android Studio报Element XXXX must be declared的解决方法
248 0
|
Android开发
Android MediaPlayer 播放prepareAsync called in state 8解决办法
Android MediaPlayer 播放prepareAsync called in state 8解决办法
287 0
|
Android开发
【错误记录】Android Studio 编译报错 ( Invalid main APK outputs : EarlySyncBuildOutput )(一)
【错误记录】Android Studio 编译报错 ( Invalid main APK outputs : EarlySyncBuildOutput )(一)
760 0
【错误记录】Android Studio 编译报错 ( Invalid main APK outputs : EarlySyncBuildOutput )(一)
|
iOS开发
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
Xcode警告消除 ios WKWebView Could not signal service com.apple.WebKit.WebContent
866 0
|
Android开发
Android Studio gradle编译 NullPointerException(no error message)解决
原文:Android Studio gradle编译 NullPointerException(no error message)解决 1.
2187 0