randomly translate noise every frame
This commit is contained in:
parent
7f84ffd551
commit
24ec0f8e57
|
@ -26,7 +26,6 @@ layout (location = 13) uniform Sphere _spheres[SPHERES];
|
||||||
|
|
||||||
uniform vec4 _seed;
|
uniform vec4 _seed;
|
||||||
|
|
||||||
|
|
||||||
layout(rgba32f, binding = 0) uniform image2D img_output; // rgba32f defines internal format, image2d for random write to output texture
|
layout(rgba32f, binding = 0) uniform image2D img_output; // rgba32f defines internal format, image2d for random write to output texture
|
||||||
layout(binding=1) uniform sampler2D _noise; // noise texture
|
layout(binding=1) uniform sampler2D _noise; // noise texture
|
||||||
|
|
||||||
|
@ -164,7 +163,10 @@ vec2 pixelUv()
|
||||||
|
|
||||||
vec4 sampleNoise()
|
vec4 sampleNoise()
|
||||||
{
|
{
|
||||||
return texture(_noise, pixelUv());
|
vec2 uv = pixelUv();
|
||||||
|
uv += _seed.xy;
|
||||||
|
|
||||||
|
return texture(_noise, uv);
|
||||||
}
|
}
|
||||||
|
|
||||||
float random(vec2 st)
|
float random(vec2 st)
|
||||||
|
@ -242,8 +244,8 @@ void main()
|
||||||
|
|
||||||
vec2 uv = pixelUv();
|
vec2 uv = pixelUv();
|
||||||
|
|
||||||
int samples = 2;
|
int samples = 1;
|
||||||
int bounces = 2;
|
int bounces = 4;
|
||||||
|
|
||||||
for (int i = 0; i < samples; i++)
|
for (int i = 0; i < samples; i++)
|
||||||
{
|
{
|
||||||
|
|
14
src/main.c
14
src/main.c
|
@ -13,17 +13,15 @@ void updateUniforms(GLuint shaderProgram);
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
|
printf("GL_TEXTURE0: %d\n", GL_TEXTURE0);
|
||||||
|
printf("GL_TEXTURE1: %d\n", GL_TEXTURE1);
|
||||||
|
|
||||||
randomInit();
|
randomInit();
|
||||||
|
|
||||||
// create a window and opengl context
|
// create a window and opengl context
|
||||||
SDL_Window* window = gfxInit(WIDTH, HEIGHT);
|
SDL_Window* window = gfxInit(WIDTH, HEIGHT);
|
||||||
|
|
||||||
// generate noise
|
|
||||||
GLuint noise = createNoiseTexture(WIDTH, HEIGHT);
|
|
||||||
|
|
||||||
// create a texture for the compute shader to write to
|
|
||||||
GLuint textureOutput = createWriteOnlyTexture(WIDTH, HEIGHT);
|
|
||||||
printWorkGroupLimits();
|
|
||||||
|
|
||||||
// compile shader programs
|
// compile shader programs
|
||||||
unsigned int computeProgram = compileComputeShaderProgram(
|
unsigned int computeProgram = compileComputeShaderProgram(
|
||||||
|
@ -32,10 +30,16 @@ int main()
|
||||||
"bin/shader.vert",
|
"bin/shader.vert",
|
||||||
"bin/shader.frag");
|
"bin/shader.frag");
|
||||||
|
|
||||||
|
// generate noise
|
||||||
|
GLuint noise = createNoiseTexture(WIDTH, HEIGHT);
|
||||||
glBindTexture(GL_TEXTURE_2D, noise);
|
glBindTexture(GL_TEXTURE_2D, noise);
|
||||||
int noiseLoc = glGetUniformLocation(computeProgram, "_noise");
|
int noiseLoc = glGetUniformLocation(computeProgram, "_noise");
|
||||||
glUniform1i(noiseLoc, noise);
|
glUniform1i(noiseLoc, noise);
|
||||||
|
|
||||||
|
// create a texture for the compute shader to write to
|
||||||
|
GLuint textureOutput = createWriteOnlyTexture(WIDTH, HEIGHT);
|
||||||
|
printWorkGroupLimits();
|
||||||
|
|
||||||
// initialise quad
|
// initialise quad
|
||||||
initBuffers();
|
initBuffers();
|
||||||
setVertexAttributes();
|
setVertexAttributes();
|
||||||
|
|
3
todo.md
3
todo.md
|
@ -1,3 +1,6 @@
|
||||||
|
* [-] preprocessor
|
||||||
|
* [x] #include directives
|
||||||
|
* [ ] keep track of previously included files to avoid redefinitions
|
||||||
* [-] render image with compute shader
|
* [-] render image with compute shader
|
||||||
* [x] render a texture to a full-screen quad
|
* [x] render a texture to a full-screen quad
|
||||||
* [x] pass uniforms to shader to animate it
|
* [x] pass uniforms to shader to animate it
|
||||||
|
|
Loading…
Reference in New Issue