Javascript webgl纹理格式、类型和内部格式的组合无效

Javascript webgl纹理格式、类型和内部格式的组合无效,javascript,webgl,textures,Javascript,Webgl,Textures,我正在尝试在单个四边形上渲染平铺贴图。要做到这一点,我尝试使用一个纹理,它包含要从瓷砖集采样的瓷砖的列/行。列/行是无符号的8位整数 问题是,我不知道使用哪种格式/类型组合。我已经看过说明书了,但似乎没什么用 以下是我上传数据的方式: //一些数据,表示2x2平铺网格 常数列=2; 常数行=2; 常数数据=[ //上校,排,-, 205, 205, 0, 0, 104, 104, 0, 0, 104, 104, 0, 0, 205, 205, 0, 0, ]; 常量缓冲区=新的Uint8Arra

我正在尝试在单个四边形上渲染平铺贴图。要做到这一点,我尝试使用一个纹理,它包含要从瓷砖集采样的瓷砖的列/行。列/行是无符号的8位整数

问题是,我不知道使用哪种格式/类型组合。我已经看过说明书了,但似乎没什么用

以下是我上传数据的方式:

//一些数据,表示2x2平铺网格
常数列=2;
常数行=2;
常数数据=[
//上校,排,-,
205, 205, 0, 0,
104, 104, 0, 0,
104, 104, 0, 0,
205, 205, 0, 0,
];
常量缓冲区=新的Uint8Array(数据);
//假设这从数据中创建了一个HTMLImageElement
const image=image.from(缓冲区、列、行);
常量纹理=gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D,纹理);
gl.Texamage2D(gl.TEXTURE_2D,
/*内部格式*/gl.RGBA8UI,
/*格式*/gl.RGBA,
/*类型*/gl.UNSIGNED_BYTE,
/*数据*/图像);
gl.texParameteri(目标,gl.TEXTURE\u WRAP\S,gl.REPEAT);
gl.texParameteri(目标,gl.TEXTURE\u WRAP\u T,gl.REPEAT);
gl.texParameteri(目标,gl.TEXTURE\u MIN\u过滤器,gl.NEAREST);
gl.texParameteri(目标,gl.TEXTURE\u MAG\u过滤器,gl.NEAREST);
// ... 然后在某个时候
gl.activeTexture(gl.TEXTURE0+0);
gl.bindTexture(gl.TEXTURE_2D,纹理);
tileMapShader.uniforms.uTILEMAP.set(0);//假装这存在
这是我尝试渲染数据的方式(无任何tileset采样):

#版本300 es
精密中泵浮子;
精密医疗泵usampler2D;
统一使用示例2D uTILEMAP;
在vec2 vTEXCOORD中;
RAG的vec4;
void main()
{
uvec4数据=纹理(uTILEMAP、vTEXCOORD);
oFRAG=vec4(data.r/255u,data.g/255u,data.b/255u,data.a/255u);
}
着色器的顶点着色器工作正常,我通过渲染平面颜色对其进行了测试。 使用上面的片段着色器,我看到一个黑屏,并得到一个警告:

GL_INVALID_OPERATION: Invalid combination of format, type and internalFormat.

什么是有效的组合?

我继续尝试了尽可能多的组合,蛮力强迫它,它看起来像是

gl.Texamage2D(gl.TEXTURE_2D,
/*内部格式*/gl.RGBA8UI,
/*格式*/gl.RGBA_整数,
/*类型*/gl.UNSIGNED_BYTE,
/*数据*/图像);

工作,所以问题是提供的格式必须是
RGBA_INTEGER

,在找到正确的组合后不久,我发现,它包含所有有效的组合。在寻找解决方案时,我肯定错过了这一点。仅供参考:这不是规格。你链接到的是参考页,遗憾的是,这些参考页有错误的历史。