]> git.lizzy.rs Git - irrlicht.git/commitdiff
Merging r6073 through r6074 from trunk to ogl-es branch.
authorcutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>
Thu, 11 Jun 2020 20:27:29 +0000 (20:27 +0000)
committercutealien <cutealien@dfc29bdd-3216-0410-991c-e03cc46cb475>
Thu, 11 Jun 2020 20:27:29 +0000 (20:27 +0000)
The support for UINT shader constants added in this is just returning warnings in GLES drivers as this would need ES 3.0

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/branches/ogl-es@6115 dfc29bdd-3216-0410-991c-e03cc46cb475

19 files changed:
include/IMaterialRendererServices.h
source/Irrlicht/CD3D9Driver.cpp
source/Irrlicht/CD3D9Driver.h
source/Irrlicht/CD3D9HLSLMaterialRenderer.cpp
source/Irrlicht/CD3D9HLSLMaterialRenderer.h
source/Irrlicht/CD3D9MaterialRenderer.h
source/Irrlicht/COGLES2Driver.cpp
source/Irrlicht/COGLES2Driver.h
source/Irrlicht/COGLES2MaterialRenderer.cpp
source/Irrlicht/COGLES2MaterialRenderer.h
source/Irrlicht/COGLESDriver.cpp
source/Irrlicht/COGLESDriver.h
source/Irrlicht/COpenGLDriver.cpp
source/Irrlicht/COpenGLDriver.h
source/Irrlicht/COpenGLExtensionHandler.cpp
source/Irrlicht/COpenGLExtensionHandler.h
source/Irrlicht/COpenGLSLMaterialRenderer.cpp
source/Irrlicht/COpenGLSLMaterialRenderer.h
tests/tests-last-passed-at.txt

index 0c18535fca3acae4adf8486f251f2c14ea0b0c99..f57e4198541032849c6a947ddd348794c2a10254 100644 (file)
@@ -71,6 +71,12 @@ public:
        //! Int interface for the above.\r
        virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) = 0;\r
 \r
+       //! Uint interface for the above.\r
+       /* NOTE: UINT only works with GLSL, not supported for other shaders.\r
+                Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.\r
+       */\r
+       virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) = 0;\r
+\r
        //! Sets a vertex shader constant.\r
        /** Can be used if you created a shader using pixel/vertex shader\r
        assembler or ARB_fragment_program or ARB_vertex_program.\r
@@ -95,6 +101,12 @@ public:
        //! Int interface for the above.\r
        virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) = 0;\r
 \r
+       //! Uint interface for the above.\r
+       /* NOTE: UINT only works with GLSL, not supported for other shaders.\r
+                Also GLES drivers in Irrlicht do not support it as this needs at least GLES 3.0.\r
+       */\r
+       virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) = 0;\r
+\r
        //! Sets a pixel shader constant.\r
        /** Can be used if you created a shader using pixel/vertex shader\r
        assembler or ARB_fragment_program or ARB_vertex_program.\r
index a821322b7a9650ee7255ae904b2ee65a23428b76..629baa408dab73f4dd5c0cf304ae1fdf061dbc89 100644 (file)
@@ -3177,6 +3177,19 @@ bool CD3D9Driver::setVertexShaderConstant(s32 index, const s32* ints, int count)
 }\r
 \r
 \r
+//! Uint interface for the above.\r
+bool CD3D9Driver::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       if (Material.MaterialType >= 0 && Material.MaterialType < (s32)MaterialRenderers.size())\r
+       {\r
+               CD3D9MaterialRenderer* r = (CD3D9MaterialRenderer*)MaterialRenderers[Material.MaterialType].Renderer;\r
+               return r->setVariable(true, index, ints, count);\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
+\r
 //! Sets a constant for the pixel shader based on an index.\r
 bool CD3D9Driver::setPixelShaderConstant(s32 index, const f32* floats, int count)\r
 {\r
@@ -3203,6 +3216,20 @@ bool CD3D9Driver::setPixelShaderConstant(s32 index, const s32* ints, int count)
 }\r
 \r
 \r
+//! Uint interface for the above.\r
+bool CD3D9Driver::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       if (Material.MaterialType >= 0 && Material.MaterialType < (s32)MaterialRenderers.size())\r
+       {\r
+               CD3D9MaterialRenderer* r = (CD3D9MaterialRenderer*)MaterialRenderers[Material.MaterialType].Renderer;\r
+               return r->setVariable(false, index, ints, count);\r
+       }\r
+\r
+       return false;\r
+}\r
+\r
+\r
+\r
 //! Adds a new material renderer to the VideoDriver, using pixel and/or\r
 //! vertex shaders to render geometry.\r
 s32 CD3D9Driver::addShaderMaterial(const c8* vertexShaderProgram,\r
index e4d7925d0b5a27500b4e6d665c4234b2bd2470dd..d28c0f4336ff23a9d1d58f46ad5f1b8c7064481c 100644 (file)
@@ -252,12 +252,18 @@ namespace video
                //! Int interface for the above.\r
                virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Sets a constant for the pixel shader based on an index.\r
                virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
 \r
                //! Int interface for the above.\r
                virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Returns a pointer to the IVideoDriver interface. (Implementation for\r
                //! IMaterialRendererServices)\r
                virtual IVideoDriver* getVideoDriver() _IRR_OVERRIDE_;\r
index 3600333ad6671657c8aa52cad1b91216ac3caac2..b7007d636a03a6a4625d780000c9d4470d978de7 100644 (file)
@@ -370,6 +370,14 @@ bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, s32 index,
 }\r
 \r
 \r
+bool CD3D9HLSLMaterialRenderer::setVariable(bool vertexShader, s32 index,\r
+                                       const u32* ints, int count)\r
+{\r
+       os::Printer::log("Error DirectX 9 does not support unsigned integer constants in shaders.", ELL_ERROR);\r
+       return false;\r
+}\r
+\r
+\r
 bool CD3D9HLSLMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype)\r
 {\r
        if (VSConstantsTable)\r
index c485ee6f50f1d5257f7d25b4189d367d4fc64052..f02c8032c848b1c83c1e46b53c8bc8b47c8a88a4 100644 (file)
@@ -56,6 +56,9 @@ public:
        //! Int interface for the above.\r
        virtual bool setVariable(bool vertexShader, s32 index, const s32* ints, int count);\r
 \r
+       //! Uint interface for the above.\r
+       virtual bool setVariable(bool vertexShader, s32 index, const u32* ints, int count);\r
+\r
        bool OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) _IRR_OVERRIDE_;\r
 \r
 protected:\r
index fb81391d0d8f777860b3c244643ac34a1bc2095f..fca6bed437e8deb70b475546daa5ade3933627d5 100644 (file)
@@ -89,6 +89,13 @@ public:
                return false;\r
        }\r
 \r
+       //! Uint interface for the above.\r
+       virtual bool setVariable(bool vertexShader, s32 index, const u32* ints, int count)\r
+       {\r
+               os::Printer::log("Invalid material to set variable in.");\r
+               return false;\r
+       }\r
+\r
 protected:\r
 \r
        IDirect3DDevice9* pID3DDevice;\r
index 5f5c6b391e65da87d40b6db2cb6a1ddd0e97212d..fe960f3d7df5f8a75766faa74b2ff49c1fc1445c 100644 (file)
@@ -2299,14 +2299,21 @@ COGLES2Driver::~COGLES2Driver()
        //! Sets a constant for the vertex shader based on an index.\r
        bool COGLES2Driver::setVertexShaderConstant(s32 index, const f32* floats, int count)\r
        {\r
-               //pass this along, as in GLSL the same routine is used for both vertex and fragment shaders\r
-               return setPixelShaderConstant(index, floats, count);\r
+               os::Printer::log("Error: Please call services->setVertexShaderConstant(), not VideoDriver->setVertexShaderConstant().");\r
+               return false;\r
        }\r
 \r
        //! Int interface for the above.\r
        bool COGLES2Driver::setVertexShaderConstant(s32 index, const s32* ints, int count)\r
        {\r
-               return setPixelShaderConstant(index, ints, count);\r
+               os::Printer::log("Error: Please call services->setVertexShaderConstant(), not VideoDriver->setVertexShaderConstant().");\r
+               return false;\r
+       }\r
+\r
+       bool COGLES2Driver::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+       {\r
+               os::Printer::log("Error: Please call services->setVertexShaderConstant(), not VideoDriver->setVertexShaderConstant().");\r
+               return false;\r
        }\r
 \r
        //! Sets a constant for the pixel shader based on an index.\r
@@ -2323,6 +2330,11 @@ COGLES2Driver::~COGLES2Driver()
                return false;\r
        }\r
 \r
+       bool COGLES2Driver::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+       {\r
+               os::Printer::log("Error: Please call services->setPixelShaderConstant(), not VideoDriver->setPixelShaderConstant().");\r
+               return false;\r
+       }\r
 \r
        //! Adds a new material renderer to the VideoDriver, using pixel and/or\r
        //! vertex shaders to render geometry.\r
index e7e2ac4b68f5201c48a1d8f34ad4acc9ecd42e83..06e80a6d280c8aaca860f22c2dbae4132005e408 100644 (file)
@@ -230,12 +230,18 @@ namespace video
                //! Int interface for the above.\r
                virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Sets a constant for the pixel shader based on an index.\r
                virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
 \r
                //! Int interface for the above.\r
                virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Adds a new material renderer to the VideoDriver\r
                virtual s32 addShaderMaterial(const c8* vertexShaderProgram, const c8* pixelShaderProgram,\r
                                IShaderConstantSetCallBack* callback, E_MATERIAL_TYPE baseMaterial, s32 userData) _IRR_OVERRIDE_;\r
index e7cdfb57c40e0bb57432a155100c747fbebd11d4..628df02c62eebe572d317062cd26b5a6983926c9 100644 (file)
@@ -384,6 +384,11 @@ bool COGLES2MaterialRenderer::setVertexShaderConstant(s32 index, const s32* ints
        return setPixelShaderConstant(index, ints, count);\r
 }\r
 \r
+bool COGLES2MaterialRenderer::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       return setPixelShaderConstant(index, ints, count);\r
+}\r
+\r
 bool COGLES2MaterialRenderer::setPixelShaderConstant(s32 index, const f32* floats, int count)\r
 {\r
        if(index < 0 || UniformInfo[index].location < 0)\r
@@ -471,6 +476,12 @@ bool COGLES2MaterialRenderer::setPixelShaderConstant(s32 index, const s32* ints,
        return status;\r
 }\r
 \r
+bool COGLES2MaterialRenderer::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       os::Printer::log("Unsigned int support needs at least GLES 3.0", ELL_WARNING);\r
+       return false;\r
+}\r
+\r
 IVideoDriver* COGLES2MaterialRenderer::getVideoDriver()\r
 {\r
        return Driver;\r
index 5a2bb5bbdb1eb9859344a118536917b343ad41d7..118cf5d70ad3751a3691147313c2fd1a2972a7fe 100644 (file)
@@ -20,7 +20,7 @@
 \r
 namespace irr\r
 {\r
-namespace video  \r
+namespace video\r
 {\r
 \r
 class COGLES2Driver;\r
@@ -30,8 +30,8 @@ class COGLES2MaterialRenderer : public IMaterialRenderer, public IMaterialRender
 public:\r
 \r
        COGLES2MaterialRenderer(\r
-               COGLES2Driver* driver, \r
-               s32& outMaterialTypeNr, \r
+               COGLES2Driver* driver,\r
+               s32& outMaterialTypeNr,\r
                const c8* vertexShaderProgram = 0,\r
                const c8* pixelShaderProgram = 0,\r
                IShaderConstantSetCallBack* callback = 0,\r
@@ -53,18 +53,20 @@ public:
 \r
        virtual s32 getRenderCapability() const;\r
 \r
-       virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates);\r
-       \r
-       virtual s32 getVertexShaderConstantID(const c8* name);\r
-       virtual s32 getPixelShaderConstantID(const c8* name);\r
-       virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);\r
-       virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1);\r
-       virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count);\r
-       virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count);\r
-       virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count);\r
-       virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count);\r
+       virtual void setBasicRenderStates(const SMaterial& material, const SMaterial& lastMaterial, bool resetAllRenderstates) _IRR_OVERRIDE_;\r
 \r
-       virtual IVideoDriver* getVideoDriver();\r
+       virtual s32 getVertexShaderConstantID(const c8* name) _IRR_OVERRIDE_;\r
+       virtual s32 getPixelShaderConstantID(const c8* name) _IRR_OVERRIDE_;\r
+       virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) _IRR_OVERRIDE_;\r
+       virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) _IRR_OVERRIDE_;\r
+       virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
+       virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
+       virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+       virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
+       virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
+       virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
+       virtual IVideoDriver* getVideoDriver() _IRR_OVERRIDE_;\r
 \r
 protected:\r
 \r
@@ -77,7 +79,7 @@ protected:
 \r
        bool createShader(GLenum shaderType, const char* shader);\r
        bool linkProgram();\r
-       \r
+\r
        COGLES2Driver* Driver;\r
        IShaderConstantSetCallBack* CallBack;\r
 \r
index 28c5687888a6f7e435620f5a3774342e3927bbdb..cca937cc1128cf448c27ed703166f2e83ffaffbd 100644 (file)
@@ -2602,6 +2602,11 @@ bool COGLES1Driver::setVertexShaderConstant(s32 index, const s32* ints, int coun
        return setPixelShaderConstant(index, ints, count);\r
 }\r
 \r
+bool COGLES1Driver::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       return setPixelShaderConstant(index, ints, count);\r
+}\r
+\r
 //! Sets a constant for the pixel shader based on an index.\r
 bool COGLES1Driver::setPixelShaderConstant(s32 index, const f32* floats, int count)\r
 {\r
@@ -2616,6 +2621,12 @@ bool COGLES1Driver::setPixelShaderConstant(s32 index, const s32* ints, int count
        return false;\r
 }\r
 \r
+bool COGLES1Driver::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       os::Printer::log("Error: Please use IMaterialRendererServices from IShaderConstantSetCallBack::OnSetConstants not VideoDriver->setPixelShaderConstant().");\r
+       return false;\r
+}\r
+\r
 //! Sets a vertex shader constant.\r
 void COGLES1Driver::setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount)\r
 {\r
index 12017d6b8c65c3aebc3b39b6e702c96e4502faed..6ffaaaf4fccb5af14130b86cb5cfa3f46c031fa7 100644 (file)
@@ -218,12 +218,18 @@ namespace video
                //! Int interface for the above.\r
                virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Sets a constant for the pixel shader based on an index.\r
                virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
 \r
                //! Int interface for the above.\r
                virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Sets a vertex shader constant.\r
                virtual void setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) _IRR_OVERRIDE_;\r
 \r
index 3c5f00e7054ca892791e08d5299ab9c17cd0cd0c..22d4abfe99bcc668d86a8970f234d76ecb2cfca0 100644 (file)
@@ -3667,19 +3667,15 @@ s32 COpenGLDriver::getPixelShaderConstantID(const c8* name)
 //! Sets a vertex shader constant.\r
 void COpenGLDriver::setVertexShaderConstant(const f32* data, s32 startRegister, s32 constantAmount)\r
 {\r
-#ifdef GL_ARB_vertex_program\r
        for (s32 i=0; i<constantAmount; ++i)\r
                extGlProgramLocalParameter4fv(GL_VERTEX_PROGRAM_ARB, startRegister+i, &data[i*4]);\r
-#endif\r
 }\r
 \r
 //! Sets a pixel shader constant.\r
 void COpenGLDriver::setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount)\r
 {\r
-#ifdef GL_ARB_fragment_program\r
        for (s32 i=0; i<constantAmount; ++i)\r
                extGlProgramLocalParameter4fv(GL_FRAGMENT_PROGRAM_ARB, startRegister+i, &data[i*4]);\r
-#endif\r
 }\r
 \r
 //! Sets a constant for the vertex shader based on an index.\r
@@ -3695,6 +3691,12 @@ bool COpenGLDriver::setVertexShaderConstant(s32 index, const s32* ints, int coun
        return setPixelShaderConstant(index, ints, count);\r
 }\r
 \r
+//! Uint interface for the above.\r
+bool COpenGLDriver::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       return setPixelShaderConstant(index, ints, count);\r
+}\r
+\r
 //! Sets a constant for the pixel shader based on an index.\r
 bool COpenGLDriver::setPixelShaderConstant(s32 index, const f32* floats, int count)\r
 {\r
@@ -3709,6 +3711,12 @@ bool COpenGLDriver::setPixelShaderConstant(s32 index, const s32* ints, int count
        return false;\r
 }\r
 \r
+bool COpenGLDriver::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       os::Printer::log("Error: Please call services->setPixelShaderConstant(), not VideoDriver->setPixelShaderConstant().");\r
+       return false;\r
+}\r
+\r
 \r
 //! Adds a new material renderer to the VideoDriver, using pixel and/or\r
 //! vertex shaders to render geometry.\r
index 54660cbe18b5315238c622a6d9dead26b1632c67..7c9f869079dca596c4d31838521436b0c26def5e 100644 (file)
@@ -293,12 +293,18 @@ namespace video
                //! Int interface for the above.\r
                virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! Sets a constant for the pixel shader based on an index.\r
                virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
 \r
                //! Int interface for the above.\r
                virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
 \r
+               //! Uint interface for the above.\r
+               virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
+\r
                //! disables all textures beginning with the optional fromStage parameter. Otherwise all texture stages are disabled.\r
                //! Returns whether disabling was successful or not.\r
                bool disableTextures(u32 fromStage=0);\r
index ee3bf8417e94c9e6c8fcfa8cc626ed2d3586972a..9c215ddb49f25a94a462817eca27955278fe4e83 100644 (file)
@@ -44,6 +44,7 @@ COpenGLExtensionHandler::COpenGLExtensionHandler() :
        pGlGetUniformLocationARB(0), pGlGetUniformLocation(0),\r
        pGlUniform1fvARB(0), pGlUniform2fvARB(0), pGlUniform3fvARB(0), pGlUniform4fvARB(0),\r
        pGlUniform1ivARB(0), pGlUniform2ivARB(0), pGlUniform3ivARB(0), pGlUniform4ivARB(0),\r
+       pGlUniform1uiv(0), pGlUniform2uiv(0), pGlUniform3uiv(0), pGlUniform4uiv(0),\r
        pGlUniformMatrix2fvARB(0), pGlUniformMatrix2x3fv(0), pGlUniformMatrix2x4fv(0),\r
        pGlUniformMatrix3x2fv(0), pGlUniformMatrix3fvARB(0), pGlUniformMatrix3x4fv(0),\r
        pGlUniformMatrix4x2fv(0), pGlUniformMatrix4x3fv(0), pGlUniformMatrix4fvARB(0),\r
@@ -87,7 +88,8 @@ COpenGLExtensionHandler::COpenGLExtensionHandler() :
        pGlBlendEquationIndexedAMD(0), pGlBlendEquationiARB(0), pGlBlendEquationSeparateIndexedAMD(0), pGlBlendEquationSeparateiARB(0),\r
        // DSA\r
     pGlTextureStorage2D(0), pGlTextureStorage3D(0), pGlTextureSubImage2D(0), pGlGetTextureImage(0), pGlNamedFramebufferTexture(0),\r
-    pGlTextureParameteri(0), pGlCreateTextures(0), pGlCreateFramebuffers(0), pGlBindTextures(0), pGlGenerateTextureMipmap(0),\r
+    pGlTextureParameteri(0), pGlTextureParameterf(0), pGlTextureParameteriv(0), pGlTextureParameterfv(0),\r
+       pGlCreateTextures(0), pGlCreateFramebuffers(0), pGlBindTextures(0), pGlGenerateTextureMipmap(0),\r
     // DSA with EXT or functions to simulate it\r
        pGlTextureStorage2DEXT(0), pGlTexStorage2D(0), pGlTextureStorage3DEXT(0), pGlTexStorage3D(0), pGlTextureSubImage2DEXT(0), pGlGetTextureImageEXT(0),\r
        pGlNamedFramebufferTextureEXT(0), pGlFramebufferTexture(0), pGlGenerateTextureMipmapEXT(0)\r
@@ -466,6 +468,10 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
        pGlUniform2ivARB = (PFNGLUNIFORM2IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform2ivARB");\r
        pGlUniform3ivARB = (PFNGLUNIFORM3IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform3ivARB");\r
        pGlUniform4ivARB = (PFNGLUNIFORM4IVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniform4ivARB");\r
+       pGlUniform1uiv = (PFNGLUNIFORM1UIVPROC) IRR_OGL_LOAD_EXTENSION("glUniform1uiv");\r
+       pGlUniform2uiv = (PFNGLUNIFORM2UIVPROC) IRR_OGL_LOAD_EXTENSION("glUniform2uiv");\r
+       pGlUniform3uiv = (PFNGLUNIFORM3UIVPROC) IRR_OGL_LOAD_EXTENSION("glUniform3uiv");\r
+       pGlUniform4uiv = (PFNGLUNIFORM4UIVPROC) IRR_OGL_LOAD_EXTENSION("glUniform4uiv");\r
        pGlUniformMatrix2fvARB = (PFNGLUNIFORMMATRIX2FVARBPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix2fvARB");\r
        pGlUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC) IRR_OGL_LOAD_EXTENSION("glUniformMatrix2x3fv");\r
        pGlUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)IRR_OGL_LOAD_EXTENSION("glUniformMatrix2x4fv");\r
@@ -581,6 +587,10 @@ void COpenGLExtensionHandler::initExtensions(bool stencilBuffer)
        pGlGetTextureImage = (PFNGLGETTEXTUREIMAGEPROC)IRR_OGL_LOAD_EXTENSION("glGetTextureImage");\r
     pGlNamedFramebufferTexture = (PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) IRR_OGL_LOAD_EXTENSION("glNamedFramebufferTexture");\r
     pGlTextureParameteri = (PFNGLTEXTUREPARAMETERIPROC) IRR_OGL_LOAD_EXTENSION("glTextureParameteri");\r
+       pGlTextureParameterf = (PFNGLTEXTUREPARAMETERFPROC)IRR_OGL_LOAD_EXTENSION("glTextureParameterf");\r
+       pGlTextureParameteriv = (PFNGLTEXTUREPARAMETERIVPROC)IRR_OGL_LOAD_EXTENSION("glTextureParameteriv");\r
+       pGlTextureParameterfv = (PFNGLTEXTUREPARAMETERFVPROC)IRR_OGL_LOAD_EXTENSION("glTextureParameterfv");\r
+\r
     pGlCreateTextures = (PFNGLCREATETEXTURESPROC) IRR_OGL_LOAD_EXTENSION("glCreateTextures");\r
     pGlCreateFramebuffers = (PFNGLCREATEFRAMEBUFFERSPROC) IRR_OGL_LOAD_EXTENSION("glCreateFramebuffers");\r
     pGlBindTextures = (PFNGLBINDTEXTURESPROC) IRR_OGL_LOAD_EXTENSION("glBindTextures");\r
index ff30e4840343d85b844b9c491e7ef53eb1877407..3ba22f7baba6325f6ce24494ceaaf687c60a251b 100644 (file)
@@ -1127,6 +1127,10 @@ class COpenGLExtensionHandler
        void extGlUniform2iv(GLint loc, GLsizei count, const GLint *v);\r
        void extGlUniform3iv(GLint loc, GLsizei count, const GLint *v);\r
        void extGlUniform4iv(GLint loc, GLsizei count, const GLint *v);\r
+       void extGlUniform1uiv(GLint loc, GLsizei count, const GLuint *v);\r
+       void extGlUniform2uiv(GLint loc, GLsizei count, const GLuint *v);\r
+       void extGlUniform3uiv(GLint loc, GLsizei count, const GLuint *v);\r
+       void extGlUniform4uiv(GLint loc, GLsizei count, const GLuint *v);\r
        void extGlUniformMatrix2fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);\r
        void extGlUniformMatrix2x3fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);\r
        void extGlUniformMatrix2x4fv(GLint loc, GLsizei count, GLboolean transpose, const GLfloat *v);\r
@@ -1199,6 +1203,9 @@ class COpenGLExtensionHandler
        void extGlGetTextureImage(GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels);\r
     void extGlNamedFramebufferTexture(GLuint framebuffer, GLenum attachment, GLuint texture, GLint level);\r
     void extGlTextureParameteri(GLuint texture, GLenum pname, GLint param);\r
+       void extGlTextureParameterf(GLuint texture,     GLenum pname, GLfloat param);\r
+       void extGlTextureParameteriv(GLuint texture, GLenum pname, const GLint* params);\r
+       void extGlTextureParameterfv(GLuint texture, GLenum pname, const GLfloat* params);\r
     void extGlCreateTextures(GLenum target, GLsizei n, GLuint* textures);\r
     void extGlCreateFramebuffers(GLsizei n, GLuint* framebuffers);\r
     void extGlBindTextures(GLuint first, GLsizei count, const GLuint *textures, const GLenum* targets);\r
@@ -1262,6 +1269,10 @@ class COpenGLExtensionHandler
                PFNGLUNIFORM2IVARBPROC pGlUniform2ivARB;\r
                PFNGLUNIFORM3IVARBPROC pGlUniform3ivARB;\r
                PFNGLUNIFORM4IVARBPROC pGlUniform4ivARB;\r
+               PFNGLUNIFORM1UIVPROC pGlUniform1uiv;\r
+               PFNGLUNIFORM2UIVPROC pGlUniform2uiv;\r
+               PFNGLUNIFORM3UIVPROC pGlUniform3uiv;\r
+               PFNGLUNIFORM4UIVPROC pGlUniform4uiv;\r
                PFNGLUNIFORMMATRIX2FVARBPROC pGlUniformMatrix2fvARB;\r
                PFNGLUNIFORMMATRIX2X3FVPROC pGlUniformMatrix2x3fv;\r
                PFNGLUNIFORMMATRIX2X4FVPROC pGlUniformMatrix2x4fv;\r
@@ -1365,6 +1376,10 @@ class COpenGLExtensionHandler
                PFNGLGETTEXTUREIMAGEPROC pGlGetTextureImage;\r
         PFNGLNAMEDFRAMEBUFFERTEXTUREPROC pGlNamedFramebufferTexture;\r
         PFNGLTEXTUREPARAMETERIPROC pGlTextureParameteri;\r
+               PFNGLTEXTUREPARAMETERFPROC pGlTextureParameterf;\r
+               PFNGLTEXTUREPARAMETERIVPROC pGlTextureParameteriv;\r
+               PFNGLTEXTUREPARAMETERFVPROC pGlTextureParameterfv;\r
+\r
         PFNGLCREATETEXTURESPROC pGlCreateTextures;\r
         PFNGLCREATEFRAMEBUFFERSPROC pGlCreateFramebuffers;\r
         PFNGLBINDTEXTURESPROC pGlBindTextures;\r
@@ -1895,6 +1910,46 @@ inline void COpenGLExtensionHandler::extGlUniform4fv(GLint loc, GLsizei count, c
 #endif\r
 }\r
 \r
+inline void COpenGLExtensionHandler::extGlUniform1uiv(GLint loc, GLsizei count, const GLuint *v)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlUniform1uiv)\r
+               pGlUniform1uiv(loc, count, v);\r
+#else\r
+       glUniform1uiv(loc, count, v);\r
+#endif\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlUniform2uiv(GLint loc, GLsizei count, const GLuint *v)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlUniform2uiv)\r
+               pGlUniform2uiv(loc, count, v);\r
+#else\r
+       glUniform2uiv(loc, count, v);\r
+#endif\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlUniform3uiv(GLint loc, GLsizei count, const GLuint *v)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlUniform3uiv)\r
+               pGlUniform3uiv(loc, count, v);\r
+#else\r
+       glUniform3uiv(loc, count, v);\r
+#endif\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlUniform4uiv(GLint loc, GLsizei count, const GLuint *v)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlUniform4uiv)\r
+               pGlUniform4uiv(loc, count, v);\r
+#else\r
+       glUniform4uiv(loc, count, v);\r
+#endif\r
+}\r
+\r
 inline void COpenGLExtensionHandler::extGlUniform1iv(GLint loc, GLsizei count, const GLint *v)\r
 {\r
 #ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
@@ -3038,8 +3093,30 @@ inline void COpenGLExtensionHandler::extGlTextureParameteri(GLuint texture, GLen
 #ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
     if (pGlTextureParameteri)\r
         pGlTextureParameteri(texture, pname, param);\r
-#else\r
-       // TODO\r
+#endif//_IRR_OPENGL_USE_EXTPOINTER_\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlTextureParameterf(GLuint texture, GLenum pname, GLfloat param)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlTextureParameterf)\r
+               pGlTextureParameterf(texture, pname, param);\r
+#endif//_IRR_OPENGL_USE_EXTPOINTER_\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlTextureParameteriv(GLuint texture, GLenum pname, const GLint* params)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlTextureParameteriv)\r
+               pGlTextureParameteriv(texture, pname, params);\r
+#endif//_IRR_OPENGL_USE_EXTPOINTER_\r
+}\r
+\r
+inline void COpenGLExtensionHandler::extGlTextureParameterfv(GLuint texture, GLenum pname, const GLfloat* params)\r
+{\r
+#ifdef _IRR_OPENGL_USE_EXTPOINTER_\r
+       if (pGlTextureParameterfv)\r
+               pGlTextureParameterfv(texture, pname, params);\r
 #endif//_IRR_OPENGL_USE_EXTPOINTER_\r
 }\r
 \r
index 13df6a6e477ccdc4b36928372ded4c77f7fad232..14a0ecfd537b029b2ddf28f8e37b4c92e3f1992d 100644 (file)
@@ -608,9 +608,13 @@ bool COpenGLSLMaterialRenderer::setVertexShaderConstant(s32 index, const s32* in
        return setPixelShaderConstant(index, ints, count);\r
 }\r
 \r
+bool COpenGLSLMaterialRenderer::setVertexShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       return setPixelShaderConstant(index, ints, count);\r
+}\r
+\r
 bool COpenGLSLMaterialRenderer::setPixelShaderConstant(s32 index, const f32* floats, int count)\r
 {\r
-#ifdef GL_ARB_shader_objects\r
        if(index < 0 || UniformInfo[index].location < 0)\r
                return false;\r
 \r
@@ -678,14 +682,10 @@ bool COpenGLSLMaterialRenderer::setPixelShaderConstant(s32 index, const f32* flo
                        break;\r
        }\r
        return status;\r
-#else\r
-       return false;\r
-#endif\r
 }\r
 \r
 bool COpenGLSLMaterialRenderer::setPixelShaderConstant(s32 index, const s32* ints, int count)\r
 {\r
-#ifdef GL_ARB_shader_objects\r
        if(index < 0 || UniformInfo[index].location < 0)\r
                return false;\r
 \r
@@ -722,9 +722,34 @@ bool COpenGLSLMaterialRenderer::setPixelShaderConstant(s32 index, const s32* int
                        break;\r
        }\r
        return status;\r
-#else\r
-       return false;\r
-#endif\r
+}\r
+\r
+bool COpenGLSLMaterialRenderer::setPixelShaderConstant(s32 index, const u32* ints, int count)\r
+{\r
+       if(index < 0 || UniformInfo[index].location < 0)\r
+               return false;\r
+\r
+       bool status = true;\r
+\r
+       switch (UniformInfo[index].type)\r
+       {\r
+               case GL_UNSIGNED_INT:\r
+                       Driver->extGlUniform1uiv(UniformInfo[index].location, count, reinterpret_cast<const GLuint*>(ints));\r
+                       break;\r
+               case GL_UNSIGNED_INT_VEC2:\r
+                       Driver->extGlUniform2uiv(UniformInfo[index].location, count/2, reinterpret_cast<const GLuint*>(ints));\r
+                       break;\r
+               case GL_UNSIGNED_INT_VEC3:\r
+                       Driver->extGlUniform3uiv(UniformInfo[index].location, count/3, reinterpret_cast<const GLuint*>(ints));\r
+                       break;\r
+               case GL_UNSIGNED_INT_VEC4:\r
+                       Driver->extGlUniform4uiv(UniformInfo[index].location, count/4, reinterpret_cast<const GLuint*>(ints));\r
+                       break;\r
+               default:\r
+                       status = false;\r
+                       break;\r
+       }\r
+       return status;\r
 }\r
 \r
 IVideoDriver* COpenGLSLMaterialRenderer::getVideoDriver()\r
index e3129eaa8b3f1ab0a8e33e79ca964d2417c7392a..354f1a068c5511de49581eaa1242e5857c1c7dc8 100644 (file)
@@ -79,8 +79,10 @@ public:
        virtual void setPixelShaderConstant(const f32* data, s32 startRegister, s32 constantAmount=1) _IRR_OVERRIDE_;\r
        virtual bool setVertexShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
        virtual bool setVertexShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
+       virtual bool setVertexShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
        virtual bool setPixelShaderConstant(s32 index, const f32* floats, int count) _IRR_OVERRIDE_;\r
        virtual bool setPixelShaderConstant(s32 index, const s32* ints, int count) _IRR_OVERRIDE_;\r
+       virtual bool setPixelShaderConstant(s32 index, const u32* ints, int count) _IRR_OVERRIDE_;\r
        virtual IVideoDriver* getVideoDriver() _IRR_OVERRIDE_;\r
 \r
 protected:\r
index 1034815def19906f729acf6cb0a5d68b8a683b64..673e1c4d86848bdb0c5bbb04f964d0e04a8fb9e1 100644 (file)
@@ -1,4 +1,4 @@
-Tests finished. 72 tests of 72 passed.
-Compiled as DEBUG
-Test suite pass at GMT Fri Jan  3 17:05:41 2020
-
+Tests finished. 72 tests of 72 passed.\r
+Compiled as DEBUG\r
+Test suite pass at GMT Mon Feb 10 14:59:56 2020\r
+\r