Browse Source

Synchronized Direct3D renderer function signatures with OpenGL.

Lasse Öörni 13 years ago
parent
commit
fbffe32fd8

+ 2 - 2
Engine/Graphics/Batch.cpp

@@ -186,8 +186,8 @@ void Batch::Prepare(Graphics* graphics, Renderer* renderer, bool setModelTransfo
     graphics->SetShaders(vertexShader_, pixelShader_);
     
     // Set camera shader parameters
-    void* cameraSource = (void*)(overrideView_ ? (unsigned)camera_ + 4 : (unsigned)camera_);
-    if (graphics->NeedParameterUpdate(SP_CAMERA, cameraSource))
+    unsigned cameraHash = overrideView_ ? (unsigned)camera_ + 4 : (unsigned)camera_;
+    if (graphics->NeedParameterUpdate(SP_CAMERA, (void*)cameraHash))
     {
         graphics->SetShaderParameter(VSP_CAMERAPOS, cameraNode->GetWorldPosition());
         graphics->SetShaderParameter(VSP_CAMERAROT, cameraNode->GetWorldTransform().RotationMatrix());

+ 11 - 3
Engine/Graphics/Direct3D9/D3D9Graphics.cpp

@@ -1120,7 +1120,15 @@ bool Graphics::NeedParameterUpdate(ShaderParameterGroup group, const void* sourc
         return false;
 }
 
-bool Graphics::NeedTextureUnit(TextureUnit unit)
+bool Graphics::HasShaderParameter(ShaderType type, StringHash param)
+{
+    if (type == VS)
+        return vertexShader_ && vertexShader_->HasParameter(param);
+    else
+        return pixelShader_ && pixelShader_->HasParameter(param);
+}
+
+bool Graphics::HasTextureUnit(TextureUnit unit)
 {
     return pixelShader_ && pixelShader_->HasTextureUnit(unit);
 }
@@ -1138,8 +1146,8 @@ void Graphics::ClearParameterSources()
 
 void Graphics::ClearTransformSources()
 {
-    shaderParameterSources_[SPG_CAMERA] = (const void*)M_MAX_UNSIGNED;
-    shaderParameterSources_[SPG_OBJECTTRANSFORM] = (const void*)M_MAX_UNSIGNED;
+    shaderParameterSources_[SP_CAMERA] = (const void*)M_MAX_UNSIGNED;
+    shaderParameterSources_[SP_OBJECTTRANSFORM] = (const void*)M_MAX_UNSIGNED;
 }
 
 void Graphics::SetTexture(unsigned index, Texture* texture)

+ 4 - 2
Engine/Graphics/Direct3D9/D3D9Graphics.h

@@ -113,10 +113,12 @@ public:
     void SetShaderParameter(StringHash param, const Matrix3x4& matrix);
     /// Register a shader parameter globally. Called by Shader.
     void RegisterShaderParameter(StringHash param, const ShaderParameter& definition);
-    /// Check whether a shader parameter in the currently set shaders needs update.
+    /// Check whether a shader parameter group needs update. Does not actually check whether parameters exist in the shaders.
     bool NeedParameterUpdate(ShaderParameterGroup group, const void* source);
+    /// Check whether a shader parameter exists on the currently set shaders.
+    bool HasShaderParameter(ShaderType type, StringHash param);
     /// Check whether the current pixel shader uses a texture unit.
-    bool NeedTextureUnit(TextureUnit unit);
+    bool HasTextureUnit(TextureUnit unit);
     /// Clear remembered shader parameter source group.
     void ClearParameterSource(ShaderParameterGroup group);
     /// Clear remembered shader parameter sources.