小编Ale*_*nus的帖子

绘制到FrameBuffer会导致Y反转

我想使用帧缓冲区使用着色器程序创建图像。这很好,除了Y是倒置的。似乎左下角变为左上角。为什么会这样?这正常吗?这会在所有android设备上发生吗?

在我的着色器程序内部,gl_FragCoordY值将反转,具体取决于我是直接绘制到帧缓冲区还是直接绘制到屏幕。

android framebuffer opengl-es-2.0

6
推荐指数
1
解决办法
101
查看次数

glClearColor无法正常工作(android opengl)

我想在运行时更改我的应用程序的背景颜色.所以点击按钮我先打电话:

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在每一帧调用,认为如果我想改变颜色的话我会调用它就足够了.

java android opengl-es opengl-es-2.0

3
推荐指数
1
解决办法
2382
查看次数

功能顺序有保证吗?

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)

javascript multithreading function node.js

3
推荐指数
1
解决办法
62
查看次数

GLSL 错误:绘制调用中未启用顶点属性

我正在 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 glsl vertex-shader opengl-es-2.0 glsles

2
推荐指数
1
解决办法
1296
查看次数