예제 #1
0
void Shader::setVector2Uniform(const std::string& _name, float _v1, float _v2) const
{
	assert(programObj_ != 0);
	glUniform2fARB(getUniformLocation(_name.c_str()), _v1, _v2);
}
예제 #2
0
파일: Uniform.hpp 프로젝트: johans/lab4
inline void Uniform<float, 2>::apply()
{
    glUniform2fARB(location, value[0], value[1]);
}
예제 #3
0
void Shader::SetUniVar(char* sVarName, float fValue0, float fValue1)
{
	//设置初始一致变量值
	glUniform2fARB(getUniLoc(m_Program, sVarName), fValue0, fValue1);
}
예제 #4
0
void ofxShader::setUniformVariable2f (char * name, float value, float value2){
	if (bLoaded == true){
		glUniform2fARB(glGetUniformLocationARB(shader, name), value, value2);
	}
}
예제 #5
0
/*
 * The main display function. (Where all the magic happens).
 * Five renders done here.
 * 1) Depth render. Stores depth and depth squared for VSM
 * 2) Gaussian Blur render. Blurs depth render's output
 * 3) Light Path Tracing render. Path traces light rays for light scattering effect
 * 4) Main render. Rendered with shadows and without light scattering. Has phong illumination and shading, bump map.
 * 5) Light Scattering Overlay render. Overlays the output of the Light Path Tracing render as an additive overlay over the current scene.
 *
 */
void RenderEngine::renderScene() {
		//==FIRST RENDER: DEPTH BUFFER
		//Render from the light POV to a FBO, store depth and square depth in a 32F frameBuffer
		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,shadowFboId);

		//Using the depth shader to do so
		glUseProgramObjectARB(depthShade->getProgram());
		// In the case we render the shadowmap to a higher resolution, the viewport must be modified accordingly.
		glViewport(0,0,kRenderWidth * kShadowMapCoef,kRenderHeight* kShadowMapCoef);
		//try to make shadow view "bigger" than normal view

		// Clear previous frame values
		glClearColor(0,0,0,1.0f);
		glClear( GL_COLOR_BUFFER_BIT |  GL_DEPTH_BUFFER_BIT);
		setupMatrices(p_light[0],p_light[1],p_light[2],l_light[0],l_light[1],l_light[2],0,1,0,10,100,120);

		// Culling switching, rendering only backface, this is done to avoid self-shadowing and improve efficiency
		glCullFace(GL_FRONT);
		//draw objects using the depth shader
		//drawObjects(depthShade);
		drawObjectTarget(depthShade);

		//cout << "0 " << glGetError() << endl;
		glGenerateMipmapEXT(GL_TEXTURE_2D);
		//Save modelview/projection matrice into texture7, also add a biais
		setTextureMatrix();

		//==SECOND (and a half) RENDER: DOUBLE PASS GAUSSIAN BLUR
		blurShadowMap(); 

		//==THIRD RENDER: PATH TRACED LIGHT SCATTERING EFFECT (CREPUSCULAR RAYS)
		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,scatterFboId);

		glViewport(0,0,kLightScatterWidth,kLightScatterHeight);

		// Clear previous frame values
		if(deathScatter) {  
				//glClearColor(1,1,1,1.0f);
				glClearColor(1,0,0,1.0f);

		} else {
				glClearColor(0,0,0,1.0f);
		}
		//glClearColor(1,1,1,1.0f);
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

		//Using the shadow shader
		glUseProgramObjectARB(darkShade->getProgram());
		glBindTexture(GL_TEXTURE_2D,colorTextureId);

		setupMatrices(p_camera[0],p_camera[1],p_camera[2],l_camera[0],l_camera[1],l_camera[2],u_camera[0],u_camera[1],u_camera[2],0.5,120,70);

		glCullFace(GL_BACK);

		//Draw light
		glPushMatrix();
		glTranslatef(p_light_scatter[0],p_light_scatter[1],p_light_scatter[2]);
		glColor4f(1.0,1.0,1.0,1.0);
		glutSolidSphere(30,20,20);
		glPopMatrix();

		//Draw objects in black
		glColor4f(0.0f,0.0f,0.0f,1);
		//drawObjects(darkShade);
		drawObjectTarget(darkShade);


		//==FOURTH RENDER: MAIN RENDER (without light scattering)
		// Now rendering from the camera POV, using the FBO to generate shadows
		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);

		glViewport(0,0,kRenderWidth,kRenderHeight);

		// Clear previous frame values
		//glClearColor(.764705882,.890196078,1,1.0f);
		glClearColor(skyColor[0], skyColor[1], skyColor[2], skyColor[3]);

		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

		//Using the shadow shader
		glUseProgramObjectARB(shade->getProgram());
		//glUniform1iARB(shade->getShadowMapAttrib(),7);
		glActiveTextureARB(GL_TEXTURE7);
		glBindTexture(GL_TEXTURE_2D,colorTextureId);

		//declared in third pass
		//setupMatrices(p_camera[0],p_camera[1],p_camera[2],l_camera[0],l_camera[1],l_camera[2],u_camera[0],u_camera[1],u_camera[2],1,120);

		//okay seriously, why do we have vec and float[] is required by openGL -_-
		float tempLight[4] = {p_light[0], p_light[1], p_light[2], 1};
		glLightfv(GL_LIGHT0, GL_POSITION, tempLight);

		glCullFace(GL_BACK);
		//draw objects using our shadow shader
		//drawObjects(shade);
		drawObjectTarget(shade);

		//==FIFTH PASS: LIGHT SCATTERING OVERLAY
		//uses main screen
		//glBindFramebufferEXT(GL_FRAMEBUFFER_EXT,0);
		//glViewport(0,0,kRenderWidth,kRenderHeight);
		glClear (GL_DEPTH_BUFFER_BIT );

		//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		glUseProgramObjectARB(scatterShade->getProgram());
		//default values

		vec2 cameraSpaceLightPos = getLightScreenCoor();
		glUniform1fARB(scatterShade->getExposureAttrib(),0.0034);
		glUniform1fARB(scatterShade->getDecayAttrib(),1.0);
		glUniform1fARB(scatterShade->getDensityAttrib(),0.84);
		glUniform1fARB(scatterShade->getWeightAttrib(),5.65);
		glUniform1iARB(scatterShade->getTextureAttrib(),0);
		glUniform2fARB(scatterShade->getLightPositionOnScreenAttrib(),cameraSpaceLightPos[0],cameraSpaceLightPos[1]);

		glActiveTextureARB(GL_TEXTURE0);
		glBindTexture(GL_TEXTURE_2D,scatterTextureId);
		glEnable(GL_BLEND); //blend the resulting render
		glBlendFunc(GL_SRC_ALPHA, GL_ONE);
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		glOrtho(-kRenderWidth/2,kRenderWidth/2,-kRenderHeight/2,kRenderHeight/2,1,20);
		glMatrixMode(GL_MODELVIEW);
		glLoadIdentity();

		glColor4f(1.0f,1.0f,1.0f,1); //rectangle to display texture
		glPushMatrix();
		glTranslated(0,0,-5);
		glBegin(GL_QUADS);
		glTexCoord2d(0,0);glVertex3f(-kRenderWidth/2,-kRenderHeight/2,0);
		glTexCoord2d(1,0);glVertex3f(kRenderWidth/2,-kRenderHeight/2,0);
		glTexCoord2d(1,1);glVertex3f(kRenderWidth/2,kRenderHeight/2,0);
		glTexCoord2d(0,1);glVertex3f(-kRenderWidth/2,kRenderHeight/2,0);
		glEnd();
		glPopMatrix();
		glDisable(GL_BLEND);

		drawOverlayTarget();

		/*

			 if(renderOpt.isDepthBuffer())
			 drawDebugBuffer(renderOpt.getDepthBufferOption());
			 */

		glutSwapBuffers();    
}
예제 #6
0
파일: shader.hpp 프로젝트: dbc/pyPolyCSG
 ShaderProgram &u(const char *var, GLfloat x, GLfloat y) { glUniform2fARB(uniform(var), x, y); return *this; }
예제 #7
0
파일: glsl_program.cpp 프로젝트: ch-nry/Gem
void glsl_program :: renderARB()
{
  if (m_linked) {
    glUseProgramObjectARB( m_programARB );
    for(int i=0; i<m_uniformCount; i++)
      {
        if(m_flag[i])
	  {
	    switch (m_type[i])
              {
		/* float vectors */
              case GL_FLOAT:
                glUniform1fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]) );
		break;
              case GL_FLOAT_VEC2_ARB:
                glUniform2fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]) );
		break;
              case GL_FLOAT_VEC3_ARB:
                glUniform3fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]),
                                static_cast<GLfloat>(m_param[i][2]) );
		break;
              case GL_FLOAT_VEC4_ARB:
                glUniform4fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]),
                                static_cast<GLfloat>(m_param[i][2]), static_cast<GLfloat>(m_param[i][3]) );
		break;

		/* int vectors */
              case GL_INT:
                glUniform1iARB( m_loc[i], static_cast<GLint>(m_param[i][0]) );
		break;
              case GL_INT_VEC2_ARB:
                glUniform2iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]) );
		break;
              case GL_INT_VEC3_ARB:
                glUniform3iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]),
                                static_cast<GLint>(m_param[i][2]) );
		break;
              case GL_INT_VEC4_ARB:
                glUniform4iARB( m_loc[i], static_cast<GLint>(m_param[i][0]), static_cast<GLint>(m_param[i][1]),
                                static_cast<GLint>(m_param[i][2]), static_cast<GLint>(m_param[i][3]) );
		break;

		/* bool vectors */
	      case GL_BOOL_ARB:
                glUniform1fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]) );
		break;
              case GL_BOOL_VEC2_ARB:
                glUniform2fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]) );
		break;
              case GL_BOOL_VEC3_ARB:
                glUniform3fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]),
                                static_cast<GLfloat>(m_param[i][2]) );
		break;
              case GL_BOOL_VEC4_ARB:
                glUniform4fARB( m_loc[i], static_cast<GLfloat>(m_param[i][0]), static_cast<GLfloat>(m_param[i][1]),
                                static_cast<GLfloat>(m_param[i][2]), static_cast<GLfloat>(m_param[i][3]) );
		break;

		/* float matrices */
              case GL_FLOAT_MAT2_ARB:
                // GL_TRUE = row major order, GL_FALSE = column major
                glUniformMatrix2fvARB( m_loc[i], 1, GL_FALSE, m_param[i] );
		break;
              case GL_FLOAT_MAT3_ARB:
                glUniformMatrix3fvARB( m_loc[i], 1, GL_FALSE, m_param[i] );
		break;
              case GL_FLOAT_MAT4_ARB:
                glUniformMatrix4fvARB( m_loc[i], 1, GL_FALSE, m_param[i] );
		break;

		/* textures */
	      case GL_SAMPLER_1D_ARB: break;
	      case GL_SAMPLER_2D_ARB:
		glUniform1iARB(m_loc[i], m_param[i][0]);
		break;
	      case GL_SAMPLER_3D_ARB: break;
	      case GL_SAMPLER_CUBE_ARB: break;
	      case GL_SAMPLER_1D_SHADOW_ARB: break;
	      case GL_SAMPLER_2D_SHADOW_ARB: break;
	      case GL_SAMPLER_2D_RECT_ARB:
		glUniform1iARB(m_loc[i], m_param[i][0]);
		break;
              default:
		;
              }
            // remove flag because the value is in GL's state now...
            m_flag[i]=0;
	  }
      }
    //  glUniform1iARB(glGetUniformLocationARB(program_object, "MyTex1"), 1);
  } else {
    /* JMZ: this is really annoying... */
    //error("no program linked");
  }
}
예제 #8
0
파일: blur.cpp 프로젝트: yvt/BloodyKart
void Blur_apply(){
	
	if(multiSamples!=1 && blur==Blur_glsl_depth){
		consoleLog("Blur_apply: Blur_glsl_depth can't be used with multisample, disabling\n");
		blur=Blur_glsl_simple;
	}
	
	if(blur==Blur_none)
		return;
	
	float lastMatrix[16];
	glGetFloatv(GL_MODELVIEW_MATRIX, lastMatrix);
	
	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	glLoadIdentity();
	glScalef(2.f/screen->w, -2.f/screen->h, 1.f);
	glTranslatef(-screen->w*.5f, -screen->h*.5f, 0.f);
	glDisable(GL_DEPTH_TEST);
	glDisable(GL_FOG);
	glDisable(GL_LIGHTING);
	glDepthMask(GL_FALSE);
	
	if(blur==Blur_basic){
		
		glColor4f(1.f, 1.f, 1.f, powf(.3f, blurdt*60.f));
		glBindTexture(GL_TEXTURE_2D, tex_screen);
		glBegin(GL_QUADS);
		glTexCoord2f(0.f, (float)screen->h/sh);
		glVertex2i(0, 0);
		glTexCoord2f(0.f, 0.f);
		glVertex2i(0, screen->h);
		glTexCoord2f((float)screen->w/sw, 0.f);
		glVertex2i(screen->w, screen->h);
		glTexCoord2f((float)screen->w/sw, (float)screen->h/sh);
		glVertex2i(screen->w, 0);
		glEnd();
		
		totalPolys+=2;
		
		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, screen->w, screen->h);
	}
#if GL_ARB_shader_objects
	else if(blur==Blur_glsl_simple){
		glUseProgramObjectARB(prg_blurSimple);
		glUniform1iARB(glGetUniformLocationARB(prg_blurSimple, "screen"),
					   0);
		glUniform2fARB(glGetUniformLocationARB(prg_blurSimple, "texSize"),
					   (float)screen->w/sw, (float)screen->h/sh);
		float imat[16];
		float mat2[16];
		memcpy(imat, mx_old, sizeof(imat));
		inverseMatrix4(imat);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurSimple, "curMatrix"),
							  1, GL_FALSE, lastMatrix);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurSimple, "oldMatrix"),
							  1, GL_FALSE, mx_old);
		inverseMatrix4(lastMatrix);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurSimple, "oldMatrixInverse"),
					   1, GL_FALSE, imat);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurSimple, "curMatrixInverse"),
							  1, GL_FALSE, lastMatrix);
		glColor4f(1,1,1,1);
		glBindTexture(GL_TEXTURE_2D, tex_screen);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, screen->w, screen->h);
		glBegin(GL_QUADS);
		glTexCoord2f(-1.f, 1.f);
		glVertex2i(0, 0);
		glTexCoord2f(-1.f, -1.f);
		glVertex2i(0, screen->h);
		glTexCoord2f(1.f, -1.f);
		glVertex2i(screen->w, screen->h);
		glTexCoord2f(1.f, 1.f);
		glVertex2i(screen->w, 0);
		glEnd();
		totalPolys+=2;
		glUseProgramObjectARB(0);
	}
#if GL_ARB_depth_texture
	else if(blur==Blur_glsl_depth){
		
		glActiveTexture(GL_TEXTURE1_ARB);
		glBindTexture(GL_TEXTURE_2D, tex_depth);
		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, screen->w, screen->h);
		glActiveTexture(GL_TEXTURE0_ARB);
		
		glUseProgramObjectARB(prg_blurDepth);
		glUniform1iARB(glGetUniformLocationARB(prg_blurDepth, "screen"),
					   0);
		glUniform1iARB(glGetUniformLocationARB(prg_blurDepth, "depthTex"),
					   1);
		glUniform2fARB(glGetUniformLocationARB(prg_blurDepth, "texSize"),
					   (float)screen->w/sw, (float)screen->h/sh);
		float imat[16];
		float mat2[16];
		memcpy(imat, mx_old, sizeof(imat));
		inverseMatrix4(imat);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurDepth, "curMatrix"),
							  1, GL_FALSE, lastMatrix);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurDepth, "oldMatrix"),
							  1, GL_FALSE, mx_old);
		inverseMatrix4(lastMatrix);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurDepth, "oldMatrixInverse"),
							  1, GL_FALSE, imat);
		glUniformMatrix4fvARB(glGetUniformLocationARB(prg_blurDepth, "curMatrixInverse"),
							  1, GL_FALSE, lastMatrix);
		glColor4f(1,1,1,1);
		glBindTexture(GL_TEXTURE_2D, tex_screen);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
		glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, screen->w, screen->h);
		glBegin(GL_QUADS);
		glTexCoord2f(-1.f, 1.f);
		glVertex2i(0, 0);
		glTexCoord2f(-1.f, -1.f);
		glVertex2i(0, screen->h);
		glTexCoord2f(1.f, -1.f);
		glVertex2i(screen->w, screen->h);
		glTexCoord2f(1.f, 1.f);
		glVertex2i(screen->w, 0);
		glEnd();
		totalPolys+=2;
		glUseProgramObjectARB(0);
	}
#endif
#endif
	
	glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
	glEnable(GL_LIGHTING);
	glMatrixMode(GL_PROJECTION);
	glPopMatrix();
	glMatrixMode(GL_MODELVIEW);
	glPopMatrix();
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_FOG);
	glDepthMask(GL_TRUE);
	
}
예제 #9
0
void shade::GLSLARBWrapper::Uniform2f(Handle index, float x, float y)
{
  glUniform2fARB(index, x, y);
}
예제 #10
0
	void KShaderProgram::setParam2(Kite::I16 Location, F32 Value1, F32 Value2) const{
		if (_kprogId && Location >= 0){
			DGL_CALL(glUniform2fARB(Location, Value1, Value2));
		}
	}
예제 #11
0
void ofxShader::setUniform2f (string name, float value, float value2) {
	if(bLoaded)
		glUniform2fARB(glGetUniformLocationARB(shader, name.c_str()), value, value2);
}
예제 #12
0
파일: panel.c 프로젝트: progschj/TLDR
panel panel_create(int width, int height, image font) {
    panel result = {width, height, font.width, font.height, NULL, NULL, 0, 0, 0, 0, 0};

    result.font = texture_create(font);
    result.foreground = malloc(4*width*height);
    result.background = malloc(4*width*height);

    // program and shader handles
    GLhandleARB vertex_shader, fragment_shader;

    int length;
    GLint shader_ok;

    // create and compiler vertex shader
    vertex_shader = glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
    length = strlen(vertex_source);
    glShaderSourceARB(vertex_shader, 1, &vertex_source, &length);
    glCompileShaderARB(vertex_shader);
    glGetObjectParameterivARB(vertex_shader, GL_COMPILE_STATUS, &shader_ok);
    assert(shader_ok);

    // create and compiler fragment shader
    fragment_shader = glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
    length = strlen(fragment_source);
    glShaderSourceARB(fragment_shader, 1, &fragment_source, &length);
    glCompileShaderARB(fragment_shader);
    glGetObjectParameterivARB(fragment_shader, GL_COMPILE_STATUS, &shader_ok);
    assert(shader_ok);

    // create program
    result.shader_program = glCreateProgramObjectARB();

    // attach shaders
    glAttachObjectARB(result.shader_program, vertex_shader);
    glAttachObjectARB(result.shader_program, fragment_shader);

    // link the program and check for errors
    glLinkProgramARB(result.shader_program);
    glGetObjectParameterivARB(result.shader_program, GL_LINK_STATUS, &shader_ok);
    assert(shader_ok);

    // we don't need these anymore
    glDeleteObjectARB(vertex_shader);
    glDeleteObjectARB(fragment_shader);

    // generate and bind the buffer object
    glGenBuffersARB(1, &result.vbo);
    glBindBufferARB(GL_ARRAY_BUFFER_ARB, result.vbo);

    // fill with data
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(GLfloat)*6*5, quad_data, GL_STATIC_DRAW_ARB);

    glActiveTexture(GL_TEXTURE1);
    glGenTextures(1, &result.fg_tex);
    glBindTexture(GL_TEXTURE_2D, result.fg_tex);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, result.width, result.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, result.foreground);

    glActiveTexture(GL_TEXTURE2);
    glGenTextures(1, &result.bg_tex);
    glBindTexture(GL_TEXTURE_2D, result.bg_tex);

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, result.width, result.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, result.background);

    glUseProgramObjectARB(result.shader_program);

    glUniform1iARB(glGetUniformLocationARB(result.shader_program, "font"), 0);
    glUniform1iARB(glGetUniformLocationARB(result.shader_program, "foreground"), 1);
    glUniform1iARB(glGetUniformLocationARB(result.shader_program, "background"), 2);
    glUniform2fARB(glGetUniformLocationARB(result.shader_program, "panel_size"), width, height);

    return result;
}
예제 #13
0
파일: pattern.c 프로젝트: zbanks/radiance
void pattern_render(struct pattern * pattern, GLuint input_tex) {
    GLenum e;

    glLoadIdentity();
    glViewport(0, 0, config.pattern.master_width, config.pattern.master_height);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, pattern->fb);

    pattern->intensity_integral = fmod(pattern->intensity_integral + pattern->intensity / config.ui.fps, MAX_INTEGRAL);

    for (int i = pattern->n_shaders - 1; i >= 0; i--) {
        glUseProgramObjectARB(pattern->shader[i]);

        // Don't worry about this part.
        for(int j = 0; j < pattern->n_shaders; j++) {
            // Or, worry about it, but don't think about it.
            glActiveTexture(GL_TEXTURE1 + j);
            glBindTexture(GL_TEXTURE_2D, pattern->tex[(pattern->flip + j + (i < j)) % (pattern->n_shaders + 1)]);
        }
        glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D,
                                  pattern->tex[(pattern->flip + i + 1) % (pattern->n_shaders + 1)], 0);

        if((e = glGetError()) != GL_NO_ERROR) FAIL("OpenGL error: %s\n", gluErrorString(e));

        GLint loc;
        loc = glGetUniformLocationARB(pattern->shader[i], "iTime");
        glUniform1fARB(loc, time_master.beat_frac + time_master.beat_index);
        loc = glGetUniformLocationARB(pattern->shader[i], "iAudioHi");
        glUniform1fARB(loc, audio_hi);
        loc = glGetUniformLocationARB(pattern->shader[i], "iAudioMid");
        glUniform1fARB(loc, audio_mid);
        loc = glGetUniformLocationARB(pattern->shader[i], "iAudioLow");
        glUniform1fARB(loc, audio_low);
        loc = glGetUniformLocationARB(pattern->shader[i], "iAudioLevel");
        glUniform1fARB(loc, audio_level);
        loc = glGetUniformLocationARB(pattern->shader[i], "iResolution");
        glUniform2fARB(loc, config.pattern.master_width, config.pattern.master_height);
        loc = glGetUniformLocationARB(pattern->shader[i], "iIntensity");
        glUniform1fARB(loc, pattern->intensity);
        loc = glGetUniformLocationARB(pattern->shader[i], "iIntensityIntegral");
        glUniform1fARB(loc, pattern->intensity_integral);
        loc = glGetUniformLocationARB(pattern->shader[i], "iFPS");
        glUniform1fARB(loc, config.ui.fps);
        loc = glGetUniformLocationARB(pattern->shader[i], "iFrame");
        glUniform1iARB(loc, 0);
        loc = glGetUniformLocationARB(pattern->shader[i], "iChannel");
        glUniform1ivARB(loc, pattern->n_shaders, pattern->uni_tex);

        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, input_tex);

        if((e = glGetError()) != GL_NO_ERROR) FAIL("OpenGL error: %s\n", gluErrorString(e));

        glClear(GL_COLOR_BUFFER_BIT);
        glBegin(GL_QUADS);
        glVertex2d(-1, -1);
        glVertex2d(-1, 1);
        glVertex2d(1, 1);
        glVertex2d(1, -1);
        glEnd();

        if((e = glGetError()) != GL_NO_ERROR) FAIL("OpenGL error: %s\n", gluErrorString(e));
    }
    pattern->flip = (pattern->flip + 1) % (pattern->n_shaders + 1);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

    if((e = glGetError()) != GL_NO_ERROR) FAIL("OpenGL error: %s\n", gluErrorString(e));
    pattern->tex_output = pattern->tex[pattern->flip];
}
예제 #14
0
void GLSLShader::SetFloat2(GLint variable, float v0, float v1)                     { if (variable!=-1) glUniform2fARB(variable, v0, v1);         }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBShaderObjects_nglUniform2fARB(JNIEnv *env, jclass clazz, jint location, jfloat v0, jfloat v1, jlong function_pointer) {
	glUniform2fARBPROC glUniform2fARB = (glUniform2fARBPROC)((intptr_t)function_pointer);
	glUniform2fARB(location, v0, v1);
}
예제 #16
0
void ofxShader::setUniformVariable2f (char const *name, float value, float value2) {
	if (loaded)
		glUniform2fARB(glGetUniformLocationARB(shader, name), value, value2);
}
예제 #17
0
bool r_create_shaders(void) {
	int i, frames[1 + FRAME_TRACE];

	OPENGL_EVENT_BEGIN(0, __PRETTY_FUNCTION__);

	// create the terrain GPU program
	if (!r_create_program("Terrain", TERRAIN_VS, TERRAIN_FS,
		&r_ter_vs, &r_ter_fs, &r_ter_prog)) {
		OPENGL_EVENT_END();

		return false;
	}
	// create the compositor GPU program
	if (!r_create_program("Compositor", COMPOSITOR_VS,
		(m_compatshader ? COMPOSITOR_COMPAT_FS : COMPOSITOR_FS),
		&r_comp_vs, &r_comp_fs, &r_comp_prog))
	{
		// try the compat shader before definitely failing
		if (!m_compatshader) {
			fprintf(stderr, "Failed compositor shader compilation, "
				"falling back to compat\n");
			if (!r_create_program("Compositor", COMPOSITOR_VS,
				COMPOSITOR_COMPAT_FS, &r_comp_vs, &r_comp_fs, &r_comp_prog)) {
				OPENGL_EVENT_END();

				return false;
			}
		}
		else
		{
			OPENGL_EVENT_END();

			return false;
		}
	}
	// create the font GPU program
	if (!r_create_program("Font", COMPOSITOR_VS, FONT_FS,
		&r_font_vs, &r_font_fs, &r_font_prog)) {
		OPENGL_EVENT_END();

		return false;
	}
	// create the prop GPU program
	if (!r_create_program("Prop", PROP_VS, PROP_FS,
		&r_prop_vs, &r_prop_fs, &r_prop_prog)) {
		OPENGL_EVENT_END();

		return false;
	}
	// create the sprite GPU program
	if (!r_create_program("Sprite", SPRITE_VS, SPRITE_FS,
		&r_sprite_vs, &r_sprite_fs, &r_sprite_prog)) {
		OPENGL_EVENT_END();

		return false;
	}
	// create the footmobile GPU program
	if (!r_create_program("Footmobile", FOOTMOBILE_VS, FONT_FS,
		&r_fmb_vs, &r_fmb_fs, &r_fmb_prog)) {
		OPENGL_EVENT_END();

		return false;
	}

	// set the terrain shader up
	glUseProgramObjectARB(r_ter_prog);
	if ((i = glGetUniformLocationARB(r_ter_prog, "terTex")) < 0) {
		fprintf(stderr, "Failed to find terrain texture uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);
	if ((i = glGetUniformLocationARB(r_ter_prog, "constParams")) < 0) {
		fprintf(stderr, "Failed to find constant params uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform2fARB(i, HEIGHTMAP_SIZE, HEIGHT_SCALE);
	if ((r_ter_patch_params = glGetUniformLocationARB(r_ter_prog,
		"patchParams")) < 0) {
		fprintf(stderr, "Failed to find per-patch params uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	if ((r_ter_height_samples = glGetUniformLocationARB(r_ter_prog,
		"heightSamples")) < 0) {
		fprintf(stderr, "Failed to find height samples uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}

	// set the prop shader up
	glUseProgramObjectARB(r_prop_prog);
	if ((i = glGetUniformLocationARB(r_prop_prog, "propTex")) < 0) {
		fprintf(stderr, "Failed to find prop texture uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);

	// set the sprite shader up
	glUseProgramObjectARB(r_sprite_prog);
	if ((i = glGetUniformLocationARB(r_sprite_prog, "spriteTex")) < 0) {
		fprintf(stderr, "Failed to find sprite texture uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);

	// set the footmobile shader up
	glUseProgramObjectARB(r_fmb_prog);
	if ((i = glGetUniformLocationARB(r_fmb_prog, "fontTex")) < 0) {
		fprintf(stderr, "Failed to find footmobile texture uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);

	// set the font shader up
	glUseProgramObjectARB(r_font_prog);
	if ((i = glGetUniformLocationARB(r_font_prog, "fontTex")) < 0) {
		fprintf(stderr, "Failed to find font texture uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);

	// find uniform locations
	glUseProgramObjectARB(r_comp_prog);
	if ((i = glGetUniformLocationARB(r_comp_prog, "overlay")) < 0) {
		fprintf(stderr, "Failed to find overlay uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	glUniform1iARB(i, 0);
	if ((r_comp_frames = glGetUniformLocationARB(r_comp_prog, "frames")) < 0) {
		fprintf(stderr, "Failed to find frames uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	if ((r_comp_neg = glGetUniformLocationARB(r_comp_prog, "negative")) < 0) {
		fprintf(stderr, "Failed to find negative uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	if ((r_comp_contrast = glGetUniformLocationARB(r_comp_prog, "cont")) < 0) {
		fprintf(stderr, "Failed to find contrast uniform variable\n");

		OPENGL_EVENT_END();

		return false;
	}
	// fill the frames array; frames at GL_TEXTURE1 + i
	for (i = 0; i < 1 + FRAME_TRACE; i++)
		frames[i] = i + 1;
	glUniform1ivARB(r_comp_frames, 1 + FRAME_TRACE, frames);

	glUseProgramObjectARB(0);

	OPENGL_EVENT_END();

	return true;
}