X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Flens%2Flens.C;fp=cinelerra-5.1%2Fplugins%2Flens%2Flens.C;h=c5b4648c9bb825fafe47a3fd8a2e68cafeedfce9;hb=af44bff549c39ac8bb6e42a791e7a211e1013526;hp=00411de94bb0085f231aea55b8104cd4ac7c2482;hpb=88d056e4f1b0a9fd692bbfb34262dd05359c4d9c;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/plugins/lens/lens.C b/cinelerra-5.1/plugins/lens/lens.C index 00411de9..c5b4648c 100644 --- a/cinelerra-5.1/plugins/lens/lens.C +++ b/cinelerra-5.1/plugins/lens/lens.C @@ -947,15 +947,14 @@ int LensMain::handle_opengl() "uniform vec2 center_coord;\n" "uniform vec4 border_color;\n" "uniform vec4 r;\n" - "uniform float radius;\n" "void main()\n" "{\n" " vec2 outcoord = gl_TexCoord[0].st * texture_extents;\n" " vec2 coord_diff = outcoord - center_coord;\n" " float z = sqrt(coord_diff.x * coord_diff.x +\n" " coord_diff.y * coord_diff.y);\n" - " vec4 radius1 = (vec4(z, z, z, z) / r) * 2.0 * radius;\n" - " vec4 z_in = r * atan(radius1) / (3.14159 / 2.0);\n" + " vec4 radius1 = vec4(z, z, z, z) / r;\n" + " vec4 z_in = r * tan(radius1) / (3.14159 / 2.0);\n" "\n" " float angle;\n" " if( coord_diff.x == 0.0 )\n" @@ -992,29 +991,29 @@ int LensMain::handle_opengl() get_output()->to_texture(); get_output()->enable_opengl(); - unsigned int frag_shader = 0; - switch( config.mode ) - { + unsigned int shader = 0; + const char *shader_frag = 0; + switch( config.mode ) { case LensConfig::SPHERICAL_SHRINK: - frag_shader = VFrame::make_shader(0, shrink_frag, 0); + shader_frag = shrink_frag; break; case LensConfig::SPHERICAL_STRETCH: - frag_shader = VFrame::make_shader(0, stretch_frag, 0); + shader_frag = stretch_frag; break; case LensConfig::RECTILINEAR_STRETCH: - frag_shader = VFrame::make_shader(0, rectilinear_stretch_frag, 0); + shader_frag = rectilinear_stretch_frag; break; case LensConfig::RECTILINEAR_SHRINK: - frag_shader = VFrame::make_shader(0, rectilinear_shrink_frag, 0); + shader_frag = rectilinear_shrink_frag; break; } - - if( frag_shader > 0 ) { + if( shader_frag ) + shader = VFrame::make_shader(0, shader_frag, 0); + if( shader > 0 ) { float border_color[] = { 0, 0, 0, 0 }; if( BC_CModels::is_yuv(get_output()->get_color_model()) ) { - border_color[1] = 0.5; - border_color[2] = 0.5; + border_color[1] = border_color[2] = 0.5; } double x_factor = config.aspect; @@ -1022,18 +1021,18 @@ int LensMain::handle_opengl() if( x_factor < 1 ) x_factor = 1; if( y_factor < 1 ) y_factor = 1; - glUseProgram(frag_shader); - glUniform1i(glGetUniformLocation(frag_shader, "tex"), 0); - glUniform2f(glGetUniformLocation(frag_shader, "aspect"), + glUseProgram(shader); + glUniform1i(glGetUniformLocation(shader, "tex"), 0); + glUniform2f(glGetUniformLocation(shader, "aspect"), x_factor, y_factor); - glUniform2f(glGetUniformLocation(frag_shader, "center_coord"), + glUniform2f(glGetUniformLocation(shader, "center_coord"), (GLfloat)get_input()->get_w() * config.center_x / 100.0, (GLfloat)get_input()->get_h() * config.center_y / 100.0); - glUniform2f(glGetUniformLocation(frag_shader, "texture_extents"), + glUniform2f(glGetUniformLocation(shader, "texture_extents"), (GLfloat)get_input()->get_texture_w(), (GLfloat)get_input()->get_texture_h()); - glUniform2f(glGetUniformLocation(frag_shader, "image_extents"), + glUniform2f(glGetUniformLocation(shader, "image_extents"), (GLfloat)get_input()->get_w(), (GLfloat)get_input()->get_h()); @@ -1042,60 +1041,55 @@ int LensMain::handle_opengl() float *fov = config.fov; float dim; float max_z; - switch( config.mode ) - { - case LensConfig::SPHERICAL_SHRINK: - dim = MAX(width, height) * config.radius; - max_z = dim * sqrt(2.0) / 2; - glUniform4fv(glGetUniformLocation(frag_shader, "border_color"), - 1, - (GLfloat*)border_color); - glUniform4f(glGetUniformLocation(frag_shader, "max_z"), + switch( config.mode ) { + case LensConfig::SPHERICAL_SHRINK: + dim = MAX(width, height) * config.radius; + max_z = dim * sqrt(2.0) / 2; + glUniform4fv(glGetUniformLocation(shader, "border_color"), + 1, (GLfloat*)border_color); + glUniform4f(glGetUniformLocation(shader, "max_z"), max_z / fov[0], max_z / fov[1], max_z / fov[2], max_z / fov[3]); - glUniform4f(glGetUniformLocation(frag_shader, "r"), + glUniform4f(glGetUniformLocation(shader, "r"), (max_z / fov[0]) * 2 / M_PI, (max_z / fov[1]) * 2 / M_PI, (max_z / fov[2]) * 2 / M_PI, (max_z / fov[3]) * 2 / M_PI); - break; + break; - case LensConfig::SPHERICAL_STRETCH: - dim = MAX(width, height) * config.radius; - max_z = dim * sqrt(2.0) / 2; - glUniform4f(glGetUniformLocation(frag_shader, "r"), + case LensConfig::SPHERICAL_STRETCH: + dim = MAX(width, height) * config.radius; + max_z = dim * sqrt(2.0) / 2; + glUniform4f(glGetUniformLocation(shader, "r"), max_z / M_PI / (fov[0] / 2.0), max_z / M_PI / (fov[1] / 2.0), max_z / M_PI / (fov[2] / 2.0), max_z / M_PI / (fov[3] / 2.0)); - break; + break; - case LensConfig::RECTILINEAR_STRETCH: - max_z = sqrt(SQR(width) + SQR(height)) / 2; - glUniform4f(glGetUniformLocation(frag_shader, "r"), + case LensConfig::RECTILINEAR_STRETCH: + max_z = sqrt(SQR(width) + SQR(height)) / 2; + glUniform4f(glGetUniformLocation(shader, "r"), max_z / M_PI / (fov[0] / 2.0), max_z / M_PI / (fov[1] / 2.0), max_z / M_PI / (fov[2] / 2.0), max_z / M_PI / (fov[3] / 2.0)); - glUniform1f(glGetUniformLocation(frag_shader, "radius"), + glUniform1f(glGetUniformLocation(shader, "radius"), config.radius); - break; + break; - case LensConfig::RECTILINEAR_SHRINK: - max_z = sqrt(SQR(width) + SQR(height)) / 2; - glUniform4f(glGetUniformLocation(frag_shader, "r"), - max_z / M_PI / (fov[0] / 2.0), - max_z / M_PI / (fov[1] / 2.0), - max_z / M_PI / (fov[2] / 2.0), - max_z / M_PI / (fov[3] / 2.0)); - glUniform1f(glGetUniformLocation(frag_shader, "radius"), - config.radius); - break; + case LensConfig::RECTILINEAR_SHRINK: + max_z = MAX(width, height) / 2 * config.radius; + glUniform4f(glGetUniformLocation(shader, "r"), + max_z / fov[0], + max_z / fov[1], + max_z / fov[2], + max_z / fov[3]); + break; } - get_output()->init_screen(); get_output()->bind_texture(0); glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, border_color); @@ -1104,7 +1098,6 @@ int LensMain::handle_opengl() get_output()->draw_texture(); glUseProgram(0); - if( config.draw_guides ) { int w = get_output()->get_w(); int h = get_output()->get_h();