我想使用帧缓冲区使用着色器程序创建图像。这很好,除了Y是倒置的。似乎左下角变为左上角。为什么会这样?这正常吗?这会在所有android设备上发生吗?
在我的着色器程序内部,gl_FragCoordY值将反转,具体取决于我是直接绘制到帧缓冲区还是直接绘制到屏幕。
我想在运行时更改我的应用程序的背景颜色.所以点击按钮我先打电话:
GLES20.glClearColor(color[0], color[1], color[2], color[3]);
Run Code Online (Sandbox Code Playgroud)
然后我打电话给:
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
Run Code Online (Sandbox Code Playgroud)
它什么都不做!它保持当前的背景颜色 - 不会改变它.但是当我暂停我的应用并再次恢复时,背景颜色会发生变化.
编辑:
我发现了一种方法.我首先打电话的每一帧,glClear但我打电话glClearColor.所以,如果我glClearColor在调用之前先调用每个帧,glClear它就可以工作.但这对我来说仍然没有意义,我想避免glClearColor在每一帧调用,认为如果我想改变颜色的话我会调用它就足够了.
let x = 0;
function a() {
console.log("called a()");
for (let i=0; i<123456789; ++i) {
x += Math.sqrt(2);
}
console.log("x = "+x);
}
function b() {
x = undefined;
console.log("called b()");
}
setTimeout(b, 20);
a();
Run Code Online (Sandbox Code Playgroud)
输出:
called a()
x = 174594265.7306214
called b()
Run Code Online (Sandbox Code Playgroud)
b应该早点调用,但它一直等到函数a完成。
我知道 js 只使用一个线程,但处理器可以在执行a和执行b期间切换a。处理器是否总是一次只执行一个函数(如果里面没有 await)?在 nodejs 和网站 javascript 中?
编辑:
这是一个等待示例:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
let x = 0;
async function a() …Run Code Online (Sandbox Code Playgroud) 我正在 OpenGL ES 2.0 中为 android 编写一个应用程序,但我遇到了一些着色器代码的问题。这里是:
attribute vec4 vPosition;
vec4 tempPosition;
void main() {
tempPosition = vPosition;
tempPosition.x = 2 - tempPosition.x;
gl_Position = tempPosition.yxzw;
}
Run Code Online (Sandbox Code Playgroud)
导致错误的行是这一行:
tempPosition.x = 2 - tempPosition.x;
Run Code Online (Sandbox Code Playgroud)
每次我想绘制一些东西时,我都会启用和禁用顶点 atrrib 数组。在我画画之前我称之为:GLES20.glEnableVertexAttribArray(sPosition);在我画画之后,我称之为
GLES20.glDisableVertexAttribArray(sPosition);
我究竟做错了什么?如何从 2 中减去 x?
编辑:
如果我将导致错误的行更改为:
tempPosition.xz = vec2(2,0) - tempPosition.xz;
Run Code Online (Sandbox Code Playgroud)
比它有效,但为什么我不能用单个数字减去?
android ×3
framebuffer ×1
function ×1
glsl ×1
glsles ×1
java ×1
javascript ×1
node.js ×1
opengl-es ×1