Webgl 的 getAttribLocation 奇怪地返回 -1

2024-01-10

我已经设法隔离此代码中的问题:

var gl;
_main_web = function() {
    gl = document.getElementById("canvas").getContext("experimental-webgl");

    gl = WebGLDebugUtils.makeDebugContext(gl,
    function (err, funcName, args) {
        throw(WebGLDebugUtils.glEnumToString(err) + " was caused by call to " + funcName);
    }
    );

    vert_shader = gl.createShader(gl.VERTEX_SHADER);
    gl.shaderSource(vert_shader,"attribute vec4 vertex;attribute vec2 uv; void main(void) {gl_Position = vertex;}\n");
    gl.compileShader(vert_shader);
    if( !gl.getShaderParameter(vert_shader,gl.COMPILE_STATUS ) ) {
        throw 0;
    }
    frag_shader = gl.createShader(gl.FRAGMENT_SHADER);
    gl.shaderSource(frag_shader,"void main(void) { gl_FragColor = vec4(1.0,1.0,1.0,1.0); } \n");
    gl.compileShader(frag_shader);
    if( !gl.getShaderParameter(frag_shader,gl.COMPILE_STATUS) ) {
        throw 1;
    }
    program = gl.createProgram();
    gl.attachShader(program,vert_shader);
    gl.attachShader(program,frag_shader);
    gl.linkProgram(program);
    if( !gl.getProgramParameter(program,gl.LINK_STATUS) ) {
        throw 2;
    }

    vertexLocation = gl.getAttribLocation(program,"vertex");
    textureLocation = gl.getAttribLocation(program,"uv");
}

vertexLocation 没问题,它是0。但是textureLocation 是-1,我错过了什么?


您正在尝试获取您声明但从未使用过的属性的位置。您的顶点着色器代码是(为了清晰起见进行了扩展):

attribute vec4 vertex;
attribute vec2 uv;
void main(void) {
    gl_Position = vertex;
}

在编译着色器期间,“uv”将被识别为未使用的参数并被删除。即使您将其分配给该着色器中的变量,但从未在片段着色器中使用它,它仍可能被删除,因为它已被识别为对最终片段没有贡献。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Webgl 的 getAttribLocation 奇怪地返回 -1 的相关文章

随机推荐

  • Android中如何用Java创建涟漪效果

    我有波纹 xml 但我不确定如何在 Java 中获得相同的效果
  • 使用 YouTube Data Api 会产生任何费用吗?

    我想知道使用 YouTube 数据 API 是否会产生任何费用 必须向 Google 支付的费用 我只能找到 YouTube 用于限制请求数量的 单位系统 除了 DaImTo 的回答之外 我还可以补充一点 如果您不需要所有 YouTube
  • “BUS_ADRALN - 无效地址对齐”错误是什么意思?

    我们使用的是 HPUX 我的代码是 C 的 我们正在得到 BUS ADRALN 无效地址对齐 在函数调用的可执行文件中 这个错误是什么意思 相同的功能运行了很多次 然后突然出现核心转储 在 GDB 中 当我尝试打印对象值时 它说不在上下文中
  • VS 代码片段:if/else 条件语法

    看着用户定义片段的 vscode 文档 https code visualstudio com docs editor userdefinedsnippets grammar 看来使用正则表达式转换 您可以执行 if else 条件 然而
  • 将动态变量传递给服务构造函数

    我在 Symfony2 中有一个服务 如下所示 services MyCustomService class MyClass arguments Arguments aren t static but dynamic based on ap
  • 如果存在两个元素之一,则执行某些操作

    我目前这样做是为了检查两个元素之一是否存在 if element1 length gt 0 element2 length gt 0 do stuff 有没有更好的方法来重写相同的内容 我的意思是 是 length与 length gt 0
  • 32 位服务器上的 PHP json_decode

    我正在编写一个 Twitter 混搭服务 当我收到 json 数据时 一些推文 id 大于2147483647 这是 32 位服务器上允许的最大整数 我想出了一个可行的解决方案 即将整数转换为字符串 这样 json decode 函数在尝试
  • .NET 中的分布式锁定

    我正在寻找可跨多台机器工作的锁定机制的建议 就我而言 我基本上只是希望能够在两台机器上启动一项服务 并在另一台机器完成之前阻止一个服务 这是一种简单的方法 可以在服务机器出现故障时确保冗余 有点像分布式锁服务 https stackover
  • MFMailComposerViewController 通过 UIActivityViewController 错误

    我正在尝试通过 iOS8 上的 UIActivityViewController 打开邮件编辑器 因此 这个过程没有我自己的代码 设备上的结果是继续错误日志记录 即使在我关闭邮件并退出到不同的 UI 控制器后 消息仍会继续被记录 AX Ex
  • 在 Matlab 中对 .csv 文件使用 textscan

    我希望有人能够帮助我使用 textscan 或 Matlab 中的其他函数 读取文件 在线文档和示例对我没有任何帮助 我想我缺少一些直观的东西 这是我想要读取的文件的结构 ID Date of ID C 1 1 C 1 2 M R3 M R
  • Google Chrome Base64 方法是否能够处理来自文件 API 的二进制数据?

    我正在使用 btoa 和 atob 进行 Base64 但 atob 方法不适用于二进制数据 只是文字 我该如何解决这个问题 if window createBlobURL window createObjectURL var bb new
  • AnyVal 的目的是什么?

    我想不出该类型的任何情况AnyVal会很有用 特别是添加了Numeric用于抽象的类型Int Long等等 是否有任何实际用例AnyVal 或者它只是一个使类型层次结构变得更漂亮的工件 只是为了澄清 我知道什么AnyVal is 我只是想不
  • 安装 Mercurial Activity 扩展时出现问题

    我使用的是安装了 Mercurial TortoiseHg 的 Windows XP 现在我需要安装外部活动延伸 https www mercurial scm org wiki ActivityExtension 我下载了该扩展并在 hg
  • Fetch:如果状态不正常,则拒绝 Promise 并捕获错误?

    这就是我要做的 import whatwg fetch function fetchVehicle id return dispatch gt return dispatch type FETCH VEHICLE payload fetch
  • request-promise 未处理的拒绝 RequestError: Error: ETIMEDOUT

    嗨 我尝试通过承诺请求编写一些下载功能 但是如果我有超时 我无法处理这个错误 我尝试了很多例子 但仍然有这个错误 Unhandled rejection RequestError Error ETIMEDOUT at new Request
  • Python ElementTree 中的多个文本节点? HTML 生成

    我正在使用 ElementTree 生成一些 HTML 但遇到了 ElementTree 不将文本存储为节点 而是存储为text and tail的属性Element 如果我想生成需要多个文本节点的内容 这就是一个问题 例如 a text1
  • 修改 Firefox 扩展中的通知超时

    我正在使用firefox SDK的通知功能来创建firefox扩展 问题是 显示通知后它消失得太快 有没有办法修改通知的超时时间 这是我正在使用的代码 notifications notify title notification titl
  • URL 中的尾随 %20 空格在 Codeigniter 中产生 404 错误

    我们的 URL 带有 URL 编码的尾随空格 20 产生 404 错误 该应用程序在 Apache 的 Codeigniter 上运行 directory page 20将返回 404 错误 directory page将返回 200 OK
  • 如何覆盖默认的密码哈希方法和环回验证方法?

    我对 Loopback 非常陌生 我想将 Loopback 的默认密码哈希方法覆盖为当前在我的后端使用的方法 以便我可以将此应用程序与该数据库同步 我读了这个链接https groups google com forum topic loo
  • Webgl 的 getAttribLocation 奇怪地返回 -1

    我已经设法隔离此代码中的问题 var gl main web function gl document getElementById canvas getContext experimental webgl gl WebGLDebugUti