Browse Source

Uses floating point texture. Calculates lorenz stuff

master
Joshua Moerman 10 years ago
parent
commit
4c53f46674
  1. 3
      resources/Fractal.fsh
  2. 25
      resources/Kernel.cl
  3. 17
      src/main.cpp

3
resources/Fractal.fsh

@ -7,5 +7,6 @@ in vec2 tex_coord_int;
out vec4 fragColor; out vec4 fragColor;
void main(){ void main(){
fragColor = texture(tex, tex_coord_int); // fragColor = texture(tex, tex_coord_int);
fragColor = vec4(0.5) + 0.5*sin(0.1 * texture(tex, tex_coord_int));
} }

25
resources/Kernel.cl

@ -4,11 +4,11 @@ kernel void initialize(size_t width, size_t height, write_only image2d_t output)
size_t y = get_global_id(1); size_t y = get_global_id(1);
int2 coord = {x, y}; int2 coord = {x, y};
//uint4 color = {255 * x / (width - 1), 255 * y / (height - 1), 0, 255}; const float xx = x / float(width - 1) - 0.5;
//uint4 color = {255 * (x%2), 120 * (y%2), 0, 255}; const float yy = y / float(height - 1) - 0.5;
uint4 color = {255, 255, 0, 255}; float4 color = {0.066 * xx, 0.1 * yy, 0.1 * yy * xx, 1};
write_imageui(output, coord, color); write_imagef(output, coord, color);
} }
kernel void update(size_t width, size_t height, read_only image2d_t input, write_only image2d_t output){ kernel void update(size_t width, size_t height, read_only image2d_t input, write_only image2d_t output){
@ -20,8 +20,19 @@ kernel void update(size_t width, size_t height, read_only image2d_t input, write
const sampler_t samplerA = CLK_NORMALIZED_COORDS_FALSE const sampler_t samplerA = CLK_NORMALIZED_COORDS_FALSE
| CLK_ADDRESS_NONE | CLK_ADDRESS_NONE
| CLK_FILTER_NEAREST; | CLK_FILTER_NEAREST;
uint4 color = read_imageui(input, samplerA, coord).yzxw;
color.x = 255 - color.x; const float4 w = read_imagef(input, samplerA, coord);
write_imageui(output, coord, color); float4 v = w;
const float s = 9.120836;
const float r = 32.799129;
const float b = 2.902814;
const float dt = 0.019997;
v.x += dt * s * (w.y - w.x);
v.y += dt * (w.x * (r - w.z) - w.y);
v.z += dt * (w.x * w.y - b * w.z);
write_imagef(output, coord, v);
} }

17
src/main.cpp

@ -58,6 +58,8 @@ struct App {
size_t W = 128; size_t W = 128;
size_t H = 128; size_t H = 128;
float wait = 2;
enum { enum {
POS_ATTR, POS_ATTR,
TEX_ATTR TEX_ATTR
@ -93,7 +95,7 @@ struct App {
moggle::gl::active_texture(GL_TEXTURE0); moggle::gl::active_texture(GL_TEXTURE0);
moggle::gl::generate_textures(1, &tex); moggle::gl::generate_textures(1, &tex);
moggle::gl::bind_texture(GL_TEXTURE_2D, tex); moggle::gl::bind_texture(GL_TEXTURE_2D, tex);
moggle::gl::texture_image_2d(GL_TEXTURE_2D, 0, GL_RGBA, W, H, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); moggle::gl::texture_image_2d(GL_TEXTURE_2D, 0, GL_RGBA32F, W, H, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
moggle::gl::texture_parameter_i(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); moggle::gl::texture_parameter_i(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
moggle::gl::texture_parameter_i(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); moggle::gl::texture_parameter_i(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
return tex; return tex;
@ -157,9 +159,16 @@ struct App {
} }
void draw(){ void draw(){
time += 1/60.0f; auto dt = 1/60.0;
time += dt;
if(wait > 0) wait -= dt;
if(wait <= 0){
for(int i = 0; i < 1; ++i){
cl::checky((*k_update)(*cl_queue, W, H, W, H, *cl_image, *cl_image));
}
}
cl::checky((*k_update)(*cl_queue, W, H, W, H, *cl_image, *cl_image));
cl::checky(cl_queue->finish()); cl::checky(cl_queue->finish());
moggle::gl::clear_color(0.65f, 0.65f, 0.65f, 1.0f); moggle::gl::clear_color(0.65f, 0.65f, 0.65f, 1.0f);
@ -176,6 +185,8 @@ struct App {
} }
void resize(size_t w, size_t h){ void resize(size_t w, size_t h){
wait = 2;
W = w; W = w;
H = h; H = h;