diff --git a/cocos/3d/CCSkybox.cpp b/cocos/3d/CCSkybox.cpp index c9eb9705dc..78e5791ad7 100644 --- a/cocos/3d/CCSkybox.cpp +++ b/cocos/3d/CCSkybox.cpp @@ -22,6 +22,14 @@ THE SOFTWARE. ****************************************************************************/ +#include "base/ccMacros.h" +#include "base/CCConfiguration.h" +#include "base/CCDirector.h" +#include "renderer/ccGLStateCache.h" +#include "renderer/CCGLProgram.h" +#include "renderer/CCGLProgramCache.h" +#include "renderer/CCGLProgramState.h" +#include "renderer/CCRenderer.h" #include "3d/CCSkybox.h" #include "3d/CCTextureCube.h" @@ -53,6 +61,17 @@ Skybox::~Skybox() _texture->release(); } +Skybox* Skybox::create(const std::string& positive_x, const std::string& negative_x, + const std::string& positive_y, const std::string& negative_y, + const std::string& positive_z, const std::string& negative_z) +{ + auto ret = new (std::nothrow) Skybox(); + ret->init(positive_x, negative_x, positive_y, negative_y, positive_z, negative_z); + + ret->autorelease(); + return ret; +} + bool Skybox::init() { // create and set our custom shader @@ -68,6 +87,17 @@ bool Skybox::init() return true; } +bool Skybox::init(const std::string& positive_x, const std::string& negative_x, + const std::string& positive_y, const std::string& negative_y, + const std::string& positive_z, const std::string& negative_z) +{ + init(); + auto texture = TextureCube::create(positive_x, negative_x, positive_y, negative_y, positive_z, negative_z); + setTexture(texture); + + return true; +} + void Skybox::initBuffers() { if (Configuration::getInstance()->supportsShareableVAO()) diff --git a/cocos/3d/CCSkybox.h b/cocos/3d/CCSkybox.h index 266e0eca86..fd07f9f325 100644 --- a/cocos/3d/CCSkybox.h +++ b/cocos/3d/CCSkybox.h @@ -25,7 +25,10 @@ #ifndef __SKYBOX_H__ #define __SKYBOX_H__ -#include "cocos2d.h" +#include "base/ccTypes.h" +#include "platform/CCPlatformMacros.h" +#include "renderer/CCCustomCommand.h" +#include "2d/CCNode.h" NS_CC_BEGIN @@ -38,6 +41,19 @@ class CC_DLL Skybox : public Node { public: CREATE_FUNC(Skybox); + + /** create skybox from 6 textures. + @param positive_x texture for the right side of the texture cube face. + @param negative_x texture for the up side of the texture cube face. + @param positive_y texture for the top side of the texture cube face + @param negative_y texture for the bottom side of the texture cube face + @param positive_z texture for the forward side of the texture cube face. + @param negative_z texture for the rear side of the texture cube face. + @return A new skybox inited with given parameters. + */ + static Skybox* create(const std::string& positive_x, const std::string& negative_x, + const std::string& positive_y, const std::string& negative_y, + const std::string& positive_z, const std::string& negative_z); /**texture getter and setter*/ void setTexture(TextureCube*); @@ -63,6 +79,13 @@ CC_CONSTRUCTOR_ACCESS: * init Skybox. */ virtual bool init(); + + /** + * initialize with texture path + */ + bool init(const std::string& positive_x, const std::string& negative_x, + const std::string& positive_y, const std::string& negative_y, + const std::string& positive_z, const std::string& negative_z); protected: