Пример #1
0
void Shader::SetUniformDirectionalLight(const char* name, const DirectionalLight& light) {
	string baseName = name;
	SetUniform3f((baseName + ".color").c_str(), light.color.ToVector3());
	SetUniform1f((baseName + ".ambientIntensity").c_str(), light.ambientIntensity);
	SetUniform3f((baseName + ".direction").c_str(), light.direction);
	SetUniform1f((baseName + ".diffuseIntensity").c_str(), light.diffuseIntensity);
}
Пример #2
0
GLvoid
glFogf(GLenum pname, GLfloat param)
{
    wes_vertbuffer_flush();

    switch(pname)
    {
        case GL_FOG_DENSITY:
            SetUniform1f(uFogDensity, param); break;
        case GL_FOG_START:
            SetUniform1f(uFogStart, param); break;
        case GL_FOG_END:
            SetUniform1f(uFogEnd, param); break;
    }
}
Пример #3
0
	void Shader::ResolveAndSetUniform(ShaderUniformDeclaration* uniform, byte* data, int offset)
	{
		switch (uniform->GetType())
		{
			case ShaderUniformDeclaration::Type::FLOAT32:
				SetUniform1f(uniform->GetLocation(), *(float*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::SAMPLER2D:
			case ShaderUniformDeclaration::Type::INT32:
				SetUniform1i(uniform->GetLocation(), *(int*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::VEC2:
				SetUniform2f(uniform->GetLocation(), *(maths::vec2*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::VEC3:
				SetUniform3f(uniform->GetLocation(), *(maths::vec3*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::VEC4:
				SetUniform4f(uniform->GetLocation(), *(maths::vec4*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::MAT3:
				// TODO: SetUniformMat3(uniform->GetLocation(), *(maths::mat3*)&data[offset]);
				break;
			case ShaderUniformDeclaration::Type::MAT4:
				SetUniformMat4(uniform->GetLocation(), *(maths::mat4*)&data[offset]);
				break;
			default:
				SP_ASSERT(false, "Unknown type!");
		}
	}
Пример #4
0
void Shader::Bind() {
  glUseProgram(shader_program);

  for(auto i : const_uniform1f) {
    SetUniform1f(i.first, i.second);
  }

  for(auto i : const_uniform1i) {
    SetUniform1i(i.first, i.second);
  }
}
Пример #5
0
GLvoid
glMaterialf(GLenum face, GLenum pname, GLfloat params)
{
    wes_vertbuffer_flush();

    switch(pname)
    {
        case GL_SHININESS:
            if (face == GL_FRONT){
                SetUniform1f(uMaterial[0].SpecExponent, params);
            } else if (face == GL_BACK){
                SetUniform1f(uMaterial[1].SpecExponent, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform1f(uMaterial[0].SpecExponent, params);
                SetUniform1f(uMaterial[1].SpecExponent, params);
            }
            break;

        default:
            PRINT_ERROR("Invalid glMaterialf parameter name\n");
    }
}
Пример #6
0
GLvoid
glAlphaFunc(GLenum func, GLclampf ref)
{
    wes_vertbuffer_flush();

    if (func == GL_NEVER){
        u_progstate.uAlphaFunc = WES_ALPHA_NEVER;
    } else if (func == GL_LESS){
        u_progstate.uAlphaFunc = WES_ALPHA_LESS;
    } else if (func == GL_EQUAL){
        u_progstate.uAlphaFunc = WES_ALPHA_EQUAL;
    } else if (func == GL_LEQUAL){
        u_progstate.uAlphaFunc = WES_ALPHA_LEQUAL;
    } else if (func == GL_GREATER){
        u_progstate.uAlphaFunc = WES_ALPHA_GREATER;
    } else if (func == GL_NOTEQUAL){
        u_progstate.uAlphaFunc = WES_ALPHA_NOTEQUAL;
    } else if (func == GL_GEQUAL){
        u_progstate.uAlphaFunc = WES_ALPHA_GEQUAL;
    } else if (func == GL_ALWAYS){
        u_progstate.uAlphaFunc = WES_ALPHA_ALWAYS;
    }
    SetUniform1f(uAlphaRef, ref);
}
Пример #7
0
GLvoid
glMaterialfv(GLenum face, GLenum pname, GLfloat *params)
{
    wes_vertbuffer_flush();

    switch(pname)
    {
        case GL_AMBIENT:
            if (face == GL_FRONT){
                SetUniform4fv(uMaterial[0].ColorAmbient, params);
            } else if (face == GL_BACK){
                SetUniform4fv(uMaterial[1].ColorAmbient, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform4fv(uMaterial[0].ColorAmbient, params);
                SetUniform4fv(uMaterial[1].ColorAmbient, params);
            }
            break;

        case GL_DIFFUSE:
            if (face == GL_FRONT){
                SetUniform4fv(uMaterial[0].ColorDiffuse, params);
            } else if (face == GL_BACK){
                SetUniform4fv(uMaterial[1].ColorDiffuse, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform4fv(uMaterial[0].ColorDiffuse, params);
                SetUniform4fv(uMaterial[1].ColorDiffuse, params);
            }
            break;

        case GL_AMBIENT_AND_DIFFUSE:
            if (face == GL_FRONT){
                SetUniform4fv(uMaterial[0].ColorAmbient, params);
                SetUniform4fv(uMaterial[0].ColorDiffuse, params);
            } else if (face == GL_BACK){
                SetUniform4fv(uMaterial[1].ColorAmbient, params);
                SetUniform4fv(uMaterial[1].ColorDiffuse, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform4fv(uMaterial[0].ColorAmbient, params);
                SetUniform4fv(uMaterial[0].ColorDiffuse, params);
                SetUniform4fv(uMaterial[1].ColorAmbient, params);
                SetUniform4fv(uMaterial[1].ColorDiffuse, params);
            }
            break;

        case GL_SPECULAR:
            if (face == GL_FRONT){
                SetUniform4fv(uMaterial[0].ColorSpec, params);
            } else if (face == GL_BACK){
                SetUniform4fv(uMaterial[1].ColorSpec, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform4fv(uMaterial[0].ColorSpec, params);
                SetUniform4fv(uMaterial[1].ColorSpec, params);
            }
            break;

        case GL_EMISSION:
            if (face == GL_FRONT){
                SetUniform4fv(uMaterial[0].ColorEmissive, params);
            } else if (face == GL_BACK){
                SetUniform4fv(uMaterial[1].ColorEmissive, params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform4fv(uMaterial[0].ColorEmissive, params);
                SetUniform4fv(uMaterial[1].ColorEmissive, params);
            }
            break;

        case GL_SHININESS:
            if (face == GL_FRONT){
                SetUniform1f(uMaterial[0].SpecExponent, *params);
            } else if (face == GL_BACK){
                SetUniform1f(uMaterial[1].SpecExponent, *params);
            } else if (face == GL_FRONT_AND_BACK){
                SetUniform1f(uMaterial[0].SpecExponent, *params);
                SetUniform1f(uMaterial[1].SpecExponent, *params);
            }
            break;

        default:
            PRINT_ERROR("Invalid glMaterialfv parameter name\n");
    }
}
Пример #8
0
GLvoid wes_state_init()
{
    int i;

    u_activetex = 0;
    SetUniform1i(uEnableRescaleNormal, 0);
    SetUniform1i(uEnableNormalize, 0);
    for(i = 0; i != WES_CLIPPLANE_NUM; i++){
        SetUniform4i(uEnableTextureGen[i], 0, 0, 0, 0);
    }
    for(i = 0; i != WES_CLIPPLANE_NUM; i++){
        SetUniform1i(uEnableClipPlane[i], 0);
    }
    SetUniform1i(uEnableLighting, 0);
    SetUniform1i(uEnableColorMaterial, 0);
    SetUniform1i(uEnableFog, 0);
    SetUniform1i(uEnableFogCoord, 0);

    for(i = 0; i != WES_LIGHT_NUM; i++){
        SetUniform1i(uEnableLight[i], 0);
        SetUniform4f(uLight[i].Position, 0.0, 0.0, 1.0, 0.0);
        SetUniform3f(uLight[i].Attenuation, 1.0, 0.0, 0.0);
        SetUniform4f(uLight[i].ColorAmbient, 0.0, 0.0, 0.0, 1.0);
        SetUniform4f(uLight[i].ColorDiffuse, 0.0, 0.0, 0.0, 1.0);
        SetUniform4f(uLight[i].ColorSpec, 0.0, 0.0, 0.0, 1.0);
        SetUniform3f(uLight[i].SpotDir, 0.0, 0.0, -1.0);
        SetUniform2f(uLight[i].SpotVar, 0.0, 180.0);
    }
    /* GL_LIGHT0's default parameters differ in these cases: */
    SetUniform4f(uLight[0].ColorDiffuse, 1.0, 1.0, 1.0, 1.0);
    SetUniform4f(uLight[0].ColorSpec, 1.0, 1.0, 1.0, 1.0);

    SetUniform1f(uRescaleFactor, 1.0);

    for(i = 0; i != WES_FACE_NUM; i++){
        SetUniform4f(uMaterial[i].ColorAmbient, 0.2, 0.2, 0.2, 1.0);
        SetUniform4f(uMaterial[i].ColorDiffuse, 0.8, 0.8, 0.8, 1.0);
        SetUniform4f(uMaterial[i].ColorSpec, 0.0, 0.0, 0.0, 1.0);
        SetUniform4f(uMaterial[i].ColorEmissive, 0.0, 0.0, 0.0, 1.0);
        SetUniform1f(uMaterial[i].SpecExponent, 0.0);
        SetUniform1i(uMaterial[i].ColorMaterial, 0);
    }

    SetUniform4f(uLightModel.ColorAmbient, 0.0, 0.0, 0.0, 1.0);
    SetUniform1i(uLightModel.TwoSided, GL_FALSE);
    SetUniform1i(uLightModel.LocalViewer, GL_FALSE);
    SetUniform1i(uLightModel.ColorControl, 0);

    SetUniform1i(uFogMode, 1);
    SetUniform1f(uFogDensity, 1.0);
    SetUniform1f(uFogStart, 0.0);
    SetUniform1f(uFogEnd, 1.0);
    SetUniform4f(uFogColor, 0.0, 0.0, 0.0, 0.0);

    for(i = 0; i < WES_MULTITEX_NUM; i++){
        SetUniform1i(uTexUnit[i], i);
        SetUniform4f(uTexEnvColor[i], 0.0f, 0.0f, 0.0f, 0.0f);
    }
    SetUniform1f(uAlphaRef, 0.0);

    u_progstate.uEnableAlphaTest = 0;
    u_progstate.uEnableFog = 0;
    u_progstate.uEnableClipPlane = 0;
    u_progstate.uAlphaFunc = 8;
    for(i = 0; i < WES_MULTITEX_NUM; i++){
        u_progstate.uTexture[i].Enable = 0;
        u_progstate.uTexture[i].Mode = WES_FUNC_MODULATE;
        u_progstate.uTexture[i].RGBCombine = WES_FUNC_MODULATE;
        u_progstate.uTexture[i].AlphaCombine = WES_FUNC_MODULATE;
        u_progstate.uTexture[i].Arg[0].RGBSrc = WES_SRC_TEXTURE;
        u_progstate.uTexture[i].Arg[1].RGBSrc = WES_SRC_PREVIOUS;
        u_progstate.uTexture[i].Arg[2].RGBSrc = WES_SRC_CONSTANT;
        u_progstate.uTexture[i].Arg[0].AlphaSrc = WES_SRC_TEXTURE;
        u_progstate.uTexture[i].Arg[1].AlphaSrc = WES_SRC_PREVIOUS;
        u_progstate.uTexture[i].Arg[2].AlphaSrc = WES_SRC_CONSTANT;
        u_progstate.uTexture[i].Arg[0].RGBOp = WES_OP_COLOR;
        u_progstate.uTexture[i].Arg[1].RGBOp = WES_OP_COLOR;
        u_progstate.uTexture[i].Arg[2].RGBOp = WES_OP_ALPHA;
        u_progstate.uTexture[i].Arg[0].AlphaOp = WES_OP_ALPHA;
        u_progstate.uTexture[i].Arg[1].AlphaOp = WES_OP_ALPHA;
        u_progstate.uTexture[i].Arg[2].AlphaOp = WES_OP_ALPHA;
    }
    u_progstate.uTexture[0].Enable = 1;

    //wes_state_update();
}
Пример #9
0
	void Shader::SetUniform1f(const String& name, float value)
	{
		SetUniform1f(GetUniformLocation(name), value);
	}