diff --git a/build/cocos2d_libs.xcodeproj/project.pbxproj b/build/cocos2d_libs.xcodeproj/project.pbxproj index 77aafab34e..bc30aeea1f 100644 --- a/build/cocos2d_libs.xcodeproj/project.pbxproj +++ b/build/cocos2d_libs.xcodeproj/project.pbxproj @@ -2772,6 +2772,9 @@ B3AF019F1842FBA400A98B85 /* b2MotorJoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = b2MotorJoint.h; sourceTree = ""; }; B609E64C19C136F9003D0074 /* CCLight.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CCLight.cpp; sourceTree = ""; }; B609E64D19C136F9003D0074 /* CCLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCLight.h; sourceTree = ""; }; + B609E65C19C17FF0003D0074 /* ccShader_3D_ColorNormal.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_ColorNormal.frag; sourceTree = ""; }; + B609E65D19C17FF0003D0074 /* ccShader_3D_ColorNormalTex.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_ColorNormalTex.frag; sourceTree = ""; }; + B609E65E19C17FF0003D0074 /* ccShader_3D_PositionNormalTex.vert */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_PositionNormalTex.vert; sourceTree = ""; }; ED9C6A9218599AD8000A5232 /* CCNodeGrid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; lineEnding = 0; path = CCNodeGrid.cpp; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.cpp; }; ED9C6A9318599AD8000A5232 /* CCNodeGrid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CCNodeGrid.h; sourceTree = ""; }; /* End PBXFileReference section */ @@ -4446,6 +4449,9 @@ 5034CA5D191D591900CE6051 /* shaders */ = { isa = PBXGroup; children = ( + B609E65C19C17FF0003D0074 /* ccShader_3D_ColorNormal.frag */, + B609E65D19C17FF0003D0074 /* ccShader_3D_ColorNormalTex.frag */, + B609E65E19C17FF0003D0074 /* ccShader_3D_PositionNormalTex.vert */, B29594AF1926D5D9003EEF37 /* ccShader_3D_Color.frag */, B29594B01926D5D9003EEF37 /* ccShader_3D_ColorTex.frag */, B29594B11926D5D9003EEF37 /* ccShader_3D_PositionTex.vert */, diff --git a/cocos/3d/CCLight.cpp b/cocos/3d/CCLight.cpp index 836ab9d7a5..f9482641f6 100644 --- a/cocos/3d/CCLight.cpp +++ b/cocos/3d/CCLight.cpp @@ -18,7 +18,7 @@ Light3D::~Light3D() Light3D* Light3D::createDirectionalLight( const Vec3 &direction, const Color3B &color ) { Light3D *light = new Light3D; - light->_lightType = DIRECTIONAL; + light->_lightType = Light3D::LightType::DIRECTIONAL; light->calculateRotation(direction); light->setColor(color); light->autorelease(); @@ -28,7 +28,7 @@ Light3D* Light3D::createDirectionalLight( const Vec3 &direction, const Color3B & Light3D* Light3D::createPointLight( const Vec3 &position, const Color3B &color, float range ) { Light3D *light = new Light3D; - light->_lightType = POINT; + light->_lightType = Light3D::LightType::POINT; light->setPosition3D(position); light->setColor(color); light->_range = range; @@ -39,7 +39,7 @@ Light3D* Light3D::createPointLight( const Vec3 &position, const Color3B &color, Light3D* Light3D::createSpotLight( const Vec3 &direction, const Vec3 &position, const Color3B &color, float innerAngle, float outerAngle, float range ) { Light3D *light = new Light3D; - light->_lightType = SPOT; + light->_lightType = Light3D::LightType::SPOT; light->calculateRotation(direction); light->setPosition3D(position); light->setColor(color); diff --git a/cocos/3d/CCLight.h b/cocos/3d/CCLight.h index b9c187e808..2b633ce557 100644 --- a/cocos/3d/CCLight.h +++ b/cocos/3d/CCLight.h @@ -26,14 +26,15 @@ #define __CCLIGHT_H__ #include "2d/CCNode.h" +#include "3d/3dExport.h" NS_CC_BEGIN -class CC_DLL Light3D : public Node +class CC_3D_DLL Light3D : public Node { public: - enum LightType + enum class LightType { DIRECTIONAL = 0, POINT = 1, diff --git a/cocos/renderer/CCGLProgram.cpp b/cocos/renderer/CCGLProgram.cpp index c237791ba7..a757267986 100644 --- a/cocos/renderer/CCGLProgram.cpp +++ b/cocos/renderer/CCGLProgram.cpp @@ -989,7 +989,7 @@ void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV) { col = Color3B::BLACK; } - if (light->getLightType() == Light3D::DIRECTIONAL) + if (light->getLightType() == Light3D::LightType::DIRECTIONAL) { CCASSERT(enabledDirLightNum < CC_MAX_DIRECTIONAL_LIGHT_NUM, ""); Vec3 dir = light->getWorldDirection(); @@ -1000,39 +1000,38 @@ void GLProgram::setUniformsForBuiltins(const Mat4 &matrixMV) setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z); ++enabledDirLightNum; } + else if (light->getLightType() == Light3D::LightType::POINT) + { + CCASSERT(enabledPointLightNum < CC_MAX_POINT_LIGHT_NUM, ""); + Mat4 mat= light->getNodeToWorldTransform(); + sprintf(str, "CC_PointLightSourceColor[%d]", enabledPointLightNum); + setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f); + sprintf(str, "CC_PointLightSourcePosition[%d]", enabledPointLightNum); + setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]); + sprintf(str, "CC_PointLightSourceRangeInverse[%d]", enabledPointLightNum); + setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange()); + ++enabledPointLightNum; + } else - if (light->getLightType() == Light3D::POINT) - { - CCASSERT(enabledPointLightNum < CC_MAX_POINT_LIGHT_NUM, ""); - Mat4 mat= light->getNodeToWorldTransform(); - sprintf(str, "CC_PointLightSourceColor[%d]", enabledPointLightNum); - setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f); - sprintf(str, "CC_PointLightSourcePosition[%d]", enabledPointLightNum); - setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]); - sprintf(str, "CC_PointLightSourceRangeInverse[%d]", enabledPointLightNum); - setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange()); - ++enabledPointLightNum; - } - else - { - CCASSERT(enabledSpotLightNum < CC_MAX_SPOT_LIGHT_NUM, ""); - Vec3 dir = light->getWorldDirection(); - dir.normalize(); - Mat4 mat= light->getNodeToWorldTransform(); - sprintf(str, "CC_SpotLightSourceColor[%d]", enabledSpotLightNum); - setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f); - sprintf(str, "CC_SpotLightSourcePosition[%d]", enabledSpotLightNum); - setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]); - sprintf(str, "CC_SpotLightSourceDirection[%d]", enabledSpotLightNum); - setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z); - sprintf(str, "CC_SpotLightSourceInnerAngleCos[%d]", enabledSpotLightNum); - setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getInnerAngle())); - sprintf(str, "CC_SpotLightSourceOuterAngleCos[%d]", enabledSpotLightNum); - setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getOuterAngle())); - sprintf(str, "CC_SpotLightSourceRangeInverse[%d]", enabledSpotLightNum); - setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange()); - ++enabledSpotLightNum; - } + { + CCASSERT(enabledSpotLightNum < CC_MAX_SPOT_LIGHT_NUM, ""); + Vec3 dir = light->getWorldDirection(); + dir.normalize(); + Mat4 mat= light->getNodeToWorldTransform(); + sprintf(str, "CC_SpotLightSourceColor[%d]", enabledSpotLightNum); + setUniformLocationWith3f(glGetUniformLocation(_program, str), col.r / 255.0f, col.g / 255.0f, col.b / 255.0f); + sprintf(str, "CC_SpotLightSourcePosition[%d]", enabledSpotLightNum); + setUniformLocationWith3f(glGetUniformLocation(_program, str), mat.m[12], mat.m[13], mat.m[14]); + sprintf(str, "CC_SpotLightSourceDirection[%d]", enabledSpotLightNum); + setUniformLocationWith3f(glGetUniformLocation(_program, str), dir.x, dir.y, dir.z); + sprintf(str, "CC_SpotLightSourceInnerAngleCos[%d]", enabledSpotLightNum); + setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getInnerAngle())); + sprintf(str, "CC_SpotLightSourceOuterAngleCos[%d]", enabledSpotLightNum); + setUniformLocationWith1f(glGetUniformLocation(_program, str), cosf(light->getOuterAngle())); + sprintf(str, "CC_SpotLightSourceRangeInverse[%d]", enabledSpotLightNum); + setUniformLocationWith1f(glGetUniformLocation(_program, str), 1.0f / light->getRange()); + ++enabledSpotLightNum; + } } diff --git a/tests/cpp-tests/Classes/LightTest/LightTestDemo.cpp b/tests/cpp-tests/Classes/LightTest/LightTestDemo.cpp index 79ebfc4779..87fbe44c72 100644 --- a/tests/cpp-tests/Classes/LightTest/LightTestDemo.cpp +++ b/tests/cpp-tests/Classes/LightTest/LightTestDemo.cpp @@ -58,13 +58,13 @@ LightTestDemo::LightTestDemo() TTFConfig ttfConfig("fonts/arial.ttf", 15); _directionalLightLabel = Label::createWithTTF(ttfConfig,"Directional Light ON"); _directionalLightLabel->retain(); - auto menuItem1 = MenuItemLabel::create(_directionalLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::DIRECTIONAL)); + auto menuItem1 = MenuItemLabel::create(_directionalLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::DIRECTIONAL)); _pointLightLabel = Label::createWithTTF(ttfConfig,"Point Light OFF"); _pointLightLabel->retain(); - auto menuItem2 = MenuItemLabel::create(_pointLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::POINT)); + auto menuItem2 = MenuItemLabel::create(_pointLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::POINT)); _spotLightLabel = Label::createWithTTF(ttfConfig,"Spot Light OFF"); _spotLightLabel->retain(); - auto menuItem3 = MenuItemLabel::create(_spotLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::SPOT)); + auto menuItem3 = MenuItemLabel::create(_spotLightLabel, CC_CALLBACK_1(LightTestDemo::SwitchLight,this,Light3D::LightType::SPOT)); auto menu = Menu::create(menuItem1,menuItem2,menuItem3,NULL); menu->setPosition(Vec2::ZERO); menuItem1->setAnchorPoint(Vec2::ANCHOR_TOP_LEFT); @@ -205,18 +205,18 @@ void LightTestDemo::addSprite() void LightTestDemo::addLights() { auto s = Director::getInstance()->getWinSize(); - _directionalLight = Light3D::CreateDirectionalLight(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200)); + _directionalLight = Light3D::createDirectionalLight(Vec3(-1.0f, -1.0f, 0.0f), Color3B(200, 200, 200)); _directionalLight->retain(); addChild(_directionalLight); _directionalLight->setCameraMask(2); - _pointLight = Light3D::CreatePointLight(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f); + _pointLight = Light3D::createPointLight(Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 10000.0f); _pointLight->retain(); _pointLight->setEnabled(false); addChild(_pointLight); _pointLight->setCameraMask(2); - _spotLight = Light3D::CreateSpotLight(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f); + _spotLight = Light3D::createSpotLight(Vec3(-1.0f, -1.0f, 0.0f), Vec3(0.0f, 0.0f, 0.0f), Color3B(200, 200, 200), 0.0, 0.5, 10000.0f); _spotLight->retain(); _spotLight->setEnabled(false); addChild(_spotLight); @@ -280,7 +280,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType ) { switch (lightType) { - case Light3D::DIRECTIONAL: + case Light3D::LightType::DIRECTIONAL: { char str[32]; bool isON = !_directionalLight->getEnabled(); @@ -290,7 +290,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType ) } break; - case Light3D::POINT: + case Light3D::LightType::POINT: { char str[32]; bool isON = !_pointLight->getEnabled(); @@ -300,7 +300,7 @@ void LightTestDemo::SwitchLight( Ref* sender,Light3D::LightType lightType ) } break; - case Light3D::SPOT: + case Light3D::LightType::SPOT: { char str[32]; bool isON = !_spotLight->getEnabled(); diff --git a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp index fdda2d5d75..3e815a597f 100644 --- a/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp +++ b/tests/cpp-tests/Classes/Sprite3DTest/Sprite3DTest.cpp @@ -552,7 +552,7 @@ void Effect3DOutline::draw(const Mat4 &transform) _glProgramState->apply(transform); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->getIndexBuffer()); - glDrawElements(mesh->getPrimitiveType(), mesh->getIndexCount(), mesh->getIndexFormat(), 0); + glDrawElements(mesh->getPrimitiveType(), (GLsizei)mesh->getIndexCount(), mesh->getIndexFormat(), 0); CC_INCREMENT_GL_DRAWN_BATCHES_AND_VERTICES(1, mesh->getIndexCount()); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);