mirror of
https://github.com/minetest/irrlicht.git
synced 2024-11-18 08:10:32 +01:00
c57da57edc
Wasn't ever used by anything and not that well defined anyway. So they all just passed it on to the drivers. And then sometimes the driver version was called and sometimes the IMaterialRendererServices version. So now everything just calls the driver - all places which need it have access to the driver anyway. Also made the driver version non-virtual for now. If someone actually really needs this for some reason I can add it back as virtual function directly in IVideoDriver. But I doubt it - the interface was hardly accessible until recently and originally only meant for internal stuff. GLES version still to do, but checked them earlier and they also just do nothing with it. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6486 dfc29bdd-3216-0410-991c-e03cc46cb475
102 lines
3.5 KiB
C++
102 lines
3.5 KiB
C++
// Copyright (C) 2002-2012 Nikolaus Gebhardt
|
|
// This file is part of the "Irrlicht Engine".
|
|
// For conditions of distribution and use, see copyright notice in irrlicht.h
|
|
|
|
#ifndef IRR_C_D3D9_HLSL_MATERIAL_RENDERER_H_INCLUDED
|
|
#define IRR_C_D3D9_HLSL_MATERIAL_RENDERER_H_INCLUDED
|
|
|
|
#include "IrrCompileConfig.h"
|
|
#ifdef _IRR_WINDOWS_
|
|
|
|
#ifdef _IRR_COMPILE_WITH_DIRECT3D_9_
|
|
|
|
#include "CD3D9ShaderMaterialRenderer.h"
|
|
#include "IGPUProgrammingServices.h"
|
|
#include "IMaterialRendererServices.h"
|
|
|
|
namespace irr
|
|
{
|
|
namespace video
|
|
{
|
|
|
|
class IVideoDriver;
|
|
class IShaderConstantSetCallBack;
|
|
class IMaterialRenderer;
|
|
|
|
//! Class for using vertex and pixel shaders via HLSL with D3D9
|
|
class CD3D9HLSLMaterialRenderer : public CD3D9ShaderMaterialRenderer, public IMaterialRendererServices
|
|
{
|
|
public:
|
|
|
|
//! Public constructor
|
|
CD3D9HLSLMaterialRenderer(IDirect3DDevice9* d3ddev, video::CD3D9Driver* driver,
|
|
s32& outMaterialTypeNr,
|
|
const c8* vertexShaderProgram,
|
|
const c8* vertexShaderEntryPointName,
|
|
E_VERTEX_SHADER_TYPE vsCompileTarget,
|
|
const c8* pixelShaderProgram,
|
|
const c8* pixelShaderEntryPointName,
|
|
E_PIXEL_SHADER_TYPE psCompileTarget,
|
|
IShaderConstantSetCallBack* callback,
|
|
IMaterialRenderer* baseMaterial,
|
|
s32 userData);
|
|
|
|
//! Destructor
|
|
~CD3D9HLSLMaterialRenderer();
|
|
|
|
bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) IRR_OVERRIDE;
|
|
|
|
// implementations for IMaterialRendererServices
|
|
virtual s32 getVertexShaderConstantID(const c8* name) IRR_OVERRIDE;
|
|
virtual s32 getPixelShaderConstantID(const c8* name) IRR_OVERRIDE;
|
|
virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) IRR_OVERRIDE;
|
|
virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) IRR_OVERRIDE;
|
|
virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE;
|
|
virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE;
|
|
virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE;
|
|
virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) IRR_OVERRIDE;
|
|
virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) IRR_OVERRIDE;
|
|
virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) IRR_OVERRIDE;
|
|
virtual IVideoDriver* getVideoDriver() IRR_OVERRIDE;
|
|
|
|
protected:
|
|
|
|
s32 getVariableID(bool vertexShader, const c8* name);
|
|
|
|
//! sets a variable in the shader.
|
|
//! \param vertexShader: True if this should be set in the vertex shader, false if
|
|
//! in the pixel shader.
|
|
//! \param index: Index of the variable
|
|
//! \param floats: Pointer to array of floats
|
|
//! \param count: Amount of floats in array.
|
|
bool setVariable(bool vertexShader, s32 index, const f32* floats, int count);
|
|
|
|
//! Int interface for the above.
|
|
bool setVariable(bool vertexShader, s32 index, const s32* ints, int count);
|
|
|
|
//! Uint interface for the above.
|
|
bool setVariable(bool vertexShader, s32 index, const u32* ints, int count);
|
|
|
|
|
|
bool createHLSLVertexShader(const char* vertexShaderProgram,
|
|
const char* shaderEntryPointName,
|
|
const char* shaderTargetName);
|
|
|
|
bool createHLSLPixelShader(const char* pixelShaderProgram,
|
|
const char* shaderEntryPointName,
|
|
const char* shaderTargetName);
|
|
|
|
void printHLSLVariables(LPD3DXCONSTANTTABLE table);
|
|
|
|
LPD3DXCONSTANTTABLE VSConstantsTable;
|
|
LPD3DXCONSTANTTABLE PSConstantsTable;
|
|
};
|
|
|
|
|
|
} // end namespace video
|
|
} // end namespace irr
|
|
|
|
#endif
|
|
#endif
|
|
#endif
|