代码拉取完成,页面将自动刷新
同步操作将从 zhanyuan/opengl-es-compute-shader-sample 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include "gl_wrapper.h"
extern int gLocalSize[3];
const char* glsl_op_add =
"#version 320 es\n"
"#define PRECISION highp\n"
"precision PRECISION float;\n"
"#define FORMAT rgba32f\n"
"layout(FORMAT, binding=0) writeonly uniform PRECISION image3D uOutput;\n"
"layout(FORMAT, binding=1) readonly uniform PRECISION image3D uInput0;\n"
"layout(FORMAT, binding=2) readonly uniform PRECISION image3D uInput1;\n"
"layout(location=3) uniform ivec4 imgSize;\n"
"layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;\n"
"void main()\n"
"{\n"
" ivec3 pos = ivec3(gl_GlobalInvocationID);\n"
" ivec3 inSize = imgSize.xyz;\n"
" if(all(lessThan(pos, inSize)))\n"
" {\n"
" vec4 sum = imageLoad(uInput0, pos) + imageLoad(uInput1, pos);\n"
" imageStore(uOutput, pos, sum);\n"
" }\n"
"}\n";
void GLOpAdd(GLuint input1, GLuint input2, GLuint output, int width, int height, int channel) {
GLuint computeProgram = CreateComputeProgram(glsl_op_add);
glUseProgram(computeProgram);
glBindImageTexture(0, output, 0, GL_TRUE, 0, GL_WRITE_ONLY, GL_RGBA32F);
glBindImageTexture(1, input1, 0, GL_TRUE, 0, GL_WRITE_ONLY, GL_RGBA32F);
glBindImageTexture(2, input2, 0, GL_TRUE, 0, GL_WRITE_ONLY, GL_RGBA32F);
glUniform4i(3, width, height, UP_DIV(channel, 4), 1);
int c_4 = UP_DIV(channel, 4);
glDispatchCompute(UP_DIV(width, gLocalSize[0]), UP_DIV(height, gLocalSize[1]), UP_DIV(c_4, gLocalSize[2]));
glDeleteProgram(computeProgram);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。