123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // Copyright (C) 2013 Patryk Nadrowski
- // Heavily based on the OpenGL driver implemented by Nikolaus Gebhardt
- // OpenGL ES driver implemented by Christian Stehno and first OpenGL ES 2.0
- // driver implemented by Amundis.
- // This file is part of the "Irrlicht Engine".
- // For conditions of distribution and use, see copyright notice in Irrlicht.h
- #ifndef __C_OGLES2_SL_MATERIAL_RENDERER_H_INCLUDED__
- #define __C_OGLES2_SL_MATERIAL_RENDERER_H_INCLUDED__
- #include "IrrCompileConfig.h"
- #ifdef _IRR_COMPILE_WITH_OGLES2_
- #if defined(_IRR_COMPILE_WITH_IPHONE_DEVICE_)
- #include <OpenGLES/ES2/gl.h>
- #include <OpenGLES/ES2/glext.h>
- #else
- #include <GLES2/gl2.h>
- #include <EGL/eglplatform.h>
- #endif
- #include "EMaterialTypes.h"
- #include "EVertexAttributes.h"
- #include "IMaterialRenderer.h"
- #include "IMaterialRendererServices.h"
- #include "IGPUProgrammingServices.h"
- #include "IShaderConstantSetCallBack.h"
- #include "irrArray.h"
- #include "irrString.h"
- namespace irr
- {
- namespace video
- {
- class COGLES2Driver;
- //! Class for using GLSL shaders with OpenGL ES 2.0
- //! Please note: This renderer implements its own IMaterialRendererServices
- class COGLES2MaterialRenderer : public IMaterialRenderer, public IMaterialRendererServices
- {
- public:
- //! Constructor
- COGLES2MaterialRenderer(
- COGLES2Driver* driver,
- s32& outMaterialTypeNr,
- const c8* vertexShaderProgram = 0,
- const c8* pixelShaderProgram = 0,
- IShaderConstantSetCallBack* callback = 0,
- E_MATERIAL_TYPE baseMaterial = EMT_SOLID,
- s32 userData = 0);
- //! Destructor
- virtual ~COGLES2MaterialRenderer();
- GLuint getProgram() const;
- virtual void OnSetMaterial(const SMaterial& material, const SMaterial& lastMaterial,
- bool resetAllRenderstates, IMaterialRendererServices* services);
- virtual bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype);
- virtual void OnUnsetMaterial();
- //! Returns if the material is transparent.
- virtual bool isTransparent() const;
- // implementations for the render services
- virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates);
- virtual s32 getVertexShaderConstantID(const c8* name);
- virtual s32 getPixelShaderConstantID(const c8* name);
- virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);
- virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);
- virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count);
- virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count);
- virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count);
- virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count);
- virtual IVideoDriver* getVideoDriver();
- protected:
- //! constructor only for use by derived classes who want to
- //! create a fall back material for example.
- COGLES2MaterialRenderer(COGLES2Driver* driver,
- IShaderConstantSetCallBack* callback = 0,
- E_MATERIAL_TYPE baseMaterial = EMT_SOLID,
- s32 userData = 0);
- void init(s32& outMaterialTypeNr, const c8* vertexShaderProgram, const c8* pixelShaderProgram, bool addMaterial = true);
- bool createShader(GLenum shaderType, const char* shader);
- bool linkProgram();
- COGLES2Driver* Driver;
- IShaderConstantSetCallBack* CallBack;
- bool Alpha;
- bool Blending;
- bool FixedBlending;
- struct SUniformInfo
- {
- core::stringc name;
- GLenum type;
- GLint location;
- };
- GLuint Program;
- core::array<SUniformInfo> UniformInfo;
- s32 UserData;
- };
- } // end namespace video
- } // end namespace irr
- #endif // compile with OpenGL ES 2.0
- #endif // if included
|