Android OpenGL ES 3.0 入门常见问题记录

前言

本文将会记录笔者在学习 OpenGL ES 过程中,遇到的问题及解决问题的参考办法。同时也提供了一些 Debug 问题的分析思路和技巧。

以下代码基于 KotlinC++

更新记录

日期 更新内容
2022.01.16 新增 Debug 技巧

Debug 技巧

一、检查 Shader 创建问题

创建 Shader 的大致步骤如下:

// 创建一个 shader,并返回它的 handle
// 其中,输入参数 shaderType 为想创建的 shader 类型,
// 一般是 GLES30.GL_VERTEX_SHADER 或 GLES30.GL_FRAGMENT_SHADER
val shaderHandle = GLES30.glCreateShader(shadeType)
// 将预先准备好的源码与该 shader 绑定
GLES30.glShaderSource(shaderHandle, sourceCode)
// 编译 shader
GLES30.glCompileShader(shaderHandle)

一般,问题容易出现在 GLES30.glCompileShader() 阶段,极少情况下,GLES30.glCreateShader() 时会发生异常。

  • shader 的 handle 一定是大于 0 的,可以用这一点来判断 glCreateShader() 是否发生异常。
  • 可以用 GLES30.glGetShaderiv()1GLES30.glGetShaderInfoLog()2 来判断 glCompileShader() 是否发生异常。

基于以上考虑,笔者将创建 shader 的过程封装成一个函数:

/**
 * 创建 shader,并返回该 shader 的 handle
 * 
 * @param shaderType		要创建的 shader 类型,通常为 GLES30.GL_VERTEX_SHADER
 * 							或 GLES30.GL_FRAGMENT_SHADER
 * @param shaderCode		该 shader 的源码
 * @return 该 shader 的 handle,正常情况一定大于 0,为 0 或者负数说明发生了错误!
 */
fun createShader(shaderType: Int, shaderCode: String): Int {
   
	val shaderTypeStr = when (shaderType) {
   
    	GLES30.GL_VERTEX_SHADER -> "Vertex Shader"
        GLES30.GL_FRAGMENT_SHADER -> "Fragment Shader"
        else -> "Unsupported type"
    }
    // !!!注意!!!DEBUG 为笔者自己加的调试开关
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值