mirror of https://github.com/axmolengine/axmol.git
update sprite 3d test
This commit is contained in:
parent
71871bacf9
commit
e0349ae975
|
@ -339,6 +339,7 @@ void Mesh::draw(Renderer* renderer, float globalZOrder, const Mat4& transform, u
|
||||||
if (isTransparent)
|
if (isTransparent)
|
||||||
flags |= Node::FLAGS_RENDER_AS_3D;
|
flags |= Node::FLAGS_RENDER_AS_3D;
|
||||||
|
|
||||||
|
this->checkTexture();
|
||||||
|
|
||||||
_meshCommand.init(globalZ,
|
_meshCommand.init(globalZ,
|
||||||
_material,
|
_material,
|
||||||
|
@ -662,22 +663,37 @@ GLuint Mesh::getIndexBuffer() const
|
||||||
return _meshIndexData->getIndexBuffer()->getVBO();
|
return _meshIndexData->getIndexBuffer()->getVBO();
|
||||||
}
|
}
|
||||||
|
|
||||||
GLuint Mesh::getTextureName()
|
void Mesh::checkTexture()
|
||||||
{
|
{
|
||||||
|
Texture2D* cacheTex = nullptr;
|
||||||
if (TextureCache::getInstance()->isDirty())
|
if (TextureCache::getInstance()->isDirty())
|
||||||
{
|
{
|
||||||
Texture2D* cacheTex = TextureCache::getInstance()->getTextureForKey(_texFile);
|
cacheTex = TextureCache::getInstance()->getTextureForKey(_texFile);
|
||||||
_texture = cacheTex;
|
if (cacheTex == nullptr)
|
||||||
}
|
|
||||||
|
|
||||||
if (_texture == nullptr || !_texture->isValid())
|
|
||||||
{
|
{
|
||||||
_texture = nullptr;
|
cacheTex = getDummyTexture();
|
||||||
Texture2D* dummyTex = getDummyTexture();
|
}
|
||||||
return dummyTex->getName();
|
}
|
||||||
|
else if (_texture != nullptr && !_texture->isValid())
|
||||||
|
{
|
||||||
|
cacheTex = getDummyTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
return _texture->getName();
|
if (cacheTex != nullptr && _texture != cacheTex)
|
||||||
|
{
|
||||||
|
CC_SAFE_RETAIN(cacheTex);
|
||||||
|
CC_SAFE_RELEASE(_texture);
|
||||||
|
_texture = cacheTex;
|
||||||
|
|
||||||
|
if (_material) {
|
||||||
|
auto technique = _material->_currentTechnique;
|
||||||
|
for (auto& pass : technique->_passes)
|
||||||
|
{
|
||||||
|
pass->setTexture(_texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bindMeshCommand();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NS_CC_END
|
NS_CC_END
|
||||||
|
|
|
@ -194,7 +194,7 @@ public:
|
||||||
*/
|
*/
|
||||||
void setForce2DQueue(bool force2D) { _force2DQueue = force2D; }
|
void setForce2DQueue(bool force2D) { _force2DQueue = force2D; }
|
||||||
|
|
||||||
GLuint getTextureName();
|
void checkTexture();
|
||||||
|
|
||||||
CC_CONSTRUCTOR_ACCESS:
|
CC_CONSTRUCTOR_ACCESS:
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ Sprite3DTests::Sprite3DTests()
|
||||||
ADD_TEST_CASE(CameraBackgroundClearTest);
|
ADD_TEST_CASE(CameraBackgroundClearTest);
|
||||||
ADD_TEST_CASE(Sprite3DVertexColorTest);
|
ADD_TEST_CASE(Sprite3DVertexColorTest);
|
||||||
ADD_TEST_CASE(MotionStreak3DTest);
|
ADD_TEST_CASE(MotionStreak3DTest);
|
||||||
|
ADD_TEST_CASE(Sprite3DPropertyTest);
|
||||||
};
|
};
|
||||||
|
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
@ -2512,3 +2513,72 @@ void MotionStreak3DTest::update(float delta)
|
||||||
_streak->setPosition3D(_sprite->getPosition3D());
|
_streak->setPosition3D(_sprite->getPosition3D());
|
||||||
_streak->setSweepAxis(Vec3(cosf(angle), 0, sinf(angle)));
|
_streak->setSweepAxis(Vec3(cosf(angle), 0, sinf(angle)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Sprite3DPropertyTest::Sprite3DPropertyTest()
|
||||||
|
{
|
||||||
|
auto s = Director::getInstance()->getWinSize();
|
||||||
|
|
||||||
|
auto camera = Camera::createPerspective(40, s.width / s.height, 0.01f, 1000.f);
|
||||||
|
camera->setCameraFlag(CameraFlag::USER1);
|
||||||
|
camera->setPosition3D(Vec3(0.f, 50.f, 200.f));
|
||||||
|
camera->lookAt(Vec3(0.f, 0.f, 0.f));
|
||||||
|
addChild(camera);
|
||||||
|
|
||||||
|
_sprite = Sprite3D::create("Sprite3DTest/orc.c3b");
|
||||||
|
_sprite->setPosition(20.f, 0.f);
|
||||||
|
_sprite->setRotation3D(Vec3(0, 180, 0));
|
||||||
|
_meshTex = _sprite->getMesh()->getTexture();
|
||||||
|
addChild(_sprite);
|
||||||
|
|
||||||
|
setCameraMask(2);
|
||||||
|
|
||||||
|
//auto listener = EventListenerTouchAllAtOnce::create();
|
||||||
|
////listener->onTouchesEnded = CC_CALLBACK_2(Sprite3DReskinTest::onTouchesEnded, this);
|
||||||
|
//_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
|
||||||
|
|
||||||
|
TTFConfig ttfConfig("fonts/arial.ttf", 20);
|
||||||
|
|
||||||
|
auto label1 = Label::createWithTTF(ttfConfig, "Print Mesh Name");
|
||||||
|
auto item1 = MenuItemLabel::create(label1, CC_CALLBACK_1(Sprite3DPropertyTest::printMeshName, this));
|
||||||
|
auto label2 = Label::createWithTTF(ttfConfig, "Remove Used Texture");
|
||||||
|
auto item2 = MenuItemLabel::create(label2, CC_CALLBACK_1(Sprite3DPropertyTest::removeUsedTexture, this));
|
||||||
|
|
||||||
|
item1->setPosition(Vec2(VisibleRect::left().x + 100, VisibleRect::bottom().y + item1->getContentSize().height * 4));
|
||||||
|
item2->setPosition(Vec2(VisibleRect::left().x + 100, VisibleRect::bottom().y + item1->getContentSize().height * 5));
|
||||||
|
|
||||||
|
auto pMenu1 = Menu::create(item1, item2, nullptr);
|
||||||
|
pMenu1->setPosition(Vec2(0, 0));
|
||||||
|
this->addChild(pMenu1, 10);
|
||||||
|
|
||||||
|
scheduleUpdate();
|
||||||
|
}
|
||||||
|
std::string Sprite3DPropertyTest::title() const
|
||||||
|
{
|
||||||
|
return "Sprite3DPropertyTest Test";
|
||||||
|
}
|
||||||
|
std::string Sprite3DPropertyTest::subtitle() const
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
void Sprite3DPropertyTest::update(float delta)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
void Sprite3DPropertyTest::printMeshName(cocos2d::Ref* sender)
|
||||||
|
{
|
||||||
|
CCLOG("MeshName Begin\n");
|
||||||
|
Vector<Mesh*> meshes =_sprite->getMeshes();
|
||||||
|
for each (Mesh* mesh in meshes)
|
||||||
|
{
|
||||||
|
CCLOG("MeshName: %s \n", mesh->getName().c_str());
|
||||||
|
}
|
||||||
|
CCLOG("MeshName End\n");
|
||||||
|
}
|
||||||
|
void Sprite3DPropertyTest::removeUsedTexture(cocos2d::Ref* sender)
|
||||||
|
{
|
||||||
|
if (_meshTex != nullptr)
|
||||||
|
{
|
||||||
|
TextureCache::getInstance()->removeTexture(_meshTex);
|
||||||
|
}
|
||||||
|
}
|
|
@ -584,4 +584,20 @@ protected:
|
||||||
cocos2d::MotionStreak3D* _streak;
|
cocos2d::MotionStreak3D* _streak;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class Sprite3DPropertyTest : public Sprite3DTestDemo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CREATE_FUNC(Sprite3DPropertyTest);
|
||||||
|
Sprite3DPropertyTest();
|
||||||
|
virtual std::string title() const override;
|
||||||
|
virtual std::string subtitle() const override;
|
||||||
|
virtual void update(float delta) override;
|
||||||
|
|
||||||
|
void printMeshName(cocos2d::Ref* sender);
|
||||||
|
void removeUsedTexture(cocos2d::Ref* sender);
|
||||||
|
protected:
|
||||||
|
cocos2d::Sprite3D* _sprite;
|
||||||
|
cocos2d::Texture2D* _meshTex;
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue