Skip to content

Commit

Permalink
implementing a material
Browse files Browse the repository at this point in the history
  • Loading branch information
Effekseer committed Nov 10, 2019
1 parent 1609219 commit b81f121
Show file tree
Hide file tree
Showing 7 changed files with 1,851 additions and 1,128 deletions.
7 changes: 7 additions & 0 deletions CreateEffekseerFiles.py
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ def output(self,path):
effekseerCPP.readLines(rootEDir + 'Effekseer.IntrusiveList.h')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceContainer.h')
effekseerCPP.readLines(rootEDir + 'Effekseer.Instance.h')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceChunk.h')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceGlobal.h')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceGroup.h')

Expand All @@ -244,6 +245,7 @@ def output(self,path):
effekseerCPP.readLines(rootEDir + 'Effekseer.IntrusiveList.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceContainer.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.Instance.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceChunk.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceGlobal.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.InstanceGroup.cpp')
effekseerCPP.readLines(rootEDir + 'Effekseer.InternalScript.cpp')
Expand Down Expand Up @@ -298,6 +300,7 @@ def output(self,path):
rendererHeader.readLines(rootGDir+'EffekseerRendererGL.Renderer.h')
rendererHeader.readLines(rootGDir+'EffekseerRendererGL.ModelLoader.h')
rendererHeader.readLines(rootGDir+'EffekseerRendererGL.MaterialLoader.h')
rendererHeader.readLines(rootGDir+'EffekseerRendererGL.DeviceObjectCollection.h')

rendererHeader.readLines(rootCGDir+'EffekseerMaterialCompilerGL.h')

Expand All @@ -312,6 +315,7 @@ def output(self,path):
rendererCPP.addLine('#include "EffekseerRendererNative.h"')
rendererCPP.addLine('#include <memory>')
rendererCPP.addLine('#include <set>')
rendererCPP.addLine('#include <iostream>')

rendererCPP.addLine('#ifdef _WIN32')
rendererCPP.addLine('#include <GL/glu.h>')
Expand Down Expand Up @@ -361,7 +365,10 @@ def output(self,path):
#rendererCPP.readLines(rootGDir+'EffekseerRendererGL.TrackRenderer.h')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.VertexArray.h')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.VertexBuffer.h')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.MaterialLoader.h')

rendererCPP.readLines(rootGDir+'EffekseerRendererGL.DeviceObject.cpp')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.DeviceObjectCollection.cpp')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.GLExtension.cpp')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.IndexBuffer.cpp')
rendererCPP.readLines(rootGDir+'EffekseerRendererGL.ModelLoader.cpp')
Expand Down
86 changes: 83 additions & 3 deletions Players/Cocos2d-x_v3/Effekseer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ namespace efk

void ReleaseTexture();

// コピー先のテクスチャを準備
// prepare a taget
void PrepareTexture(uint32_t width, uint32_t height, GLint internalFormat);

virtual bool OnDistorting() override;
Expand Down Expand Up @@ -340,10 +340,80 @@ namespace efk

#pragma endregion

class CachedMaterialLoader : public ::Effekseer::MaterialLoader
{
private:
struct Cached
{
::Effekseer::MaterialData* DataPtr;
int32_t Count;

Cached()
{
DataPtr = nullptr;
Count = 1;
}
};

::Effekseer::MaterialLoader* loader_;
std::map<std::basic_string<EFK_CHAR>, Cached> cache_;
std::map<void*, std::basic_string<EFK_CHAR>> data2key_;

public:
CachedMaterialLoader(::Effekseer::MaterialLoader* loader) { this->loader_ = loader; }

virtual ~CachedMaterialLoader() { ES_SAFE_DELETE(loader_); }

virtual ::Effekseer::MaterialData* Load(const EFK_CHAR* path) override
{
auto key = std::basic_string<EFK_CHAR>(path);

auto it = cache_.find(key);

if (it != cache_.end())
{
it->second.Count++;
return it->second.DataPtr;
}

Cached v;
v.DataPtr = loader_->Load(path);

if (v.DataPtr != nullptr)
{
cache_[key] = v;
data2key_[v.DataPtr] = key;
}

return v.DataPtr;
}

virtual void Unload(::Effekseer::MaterialData* data) override
{
if (data == nullptr)
return;
auto key = data2key_[data];

auto it = cache_.find(key);

if (it != cache_.end())
{
it->second.Count--;
if (it->second.Count == 0)
{
loader_->Unload(it->second.DataPtr);
data2key_.erase(data);
cache_.erase(key);
}
}
}
};

#pragma region EffekseerSetting
class EffekseerSetting;

static EffekseerSetting* g_effekseerSetting = nullptr;
static ::EffekseerRendererGL::DeviceObjectCollection* g_deviceObjectCollection = nullptr;

class EffekseerSetting
: public ::Effekseer::Setting
Expand All @@ -357,12 +427,19 @@ namespace efk
SetEffectLoader(Effekseer::Effect::CreateEffectLoader(effectFile));
SetTextureLoader(new TextureLoader(effectFile));
SetModelLoader(new ::EffekseerRendererGL::ModelLoader(effectFile));

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
SetMaterialLoader(new CachedMaterialLoader(new ::EffekseerRendererGL::MaterialLoader(EffekseerRendererGL::OpenGLDeviceType::OpenGLES2, nullptr, g_deviceObjectCollection, effectFile)));
#else
SetMaterialLoader(new CachedMaterialLoader(new ::EffekseerRendererGL::MaterialLoader(EffekseerRendererGL::OpenGLDeviceType::OpenGL2, nullptr, g_deviceObjectCollection, effectFile)));
#endif
// TODO sound
}

virtual ~EffekseerSetting()
{
delete effectFile;
ES_SAFE_RELEASE(g_deviceObjectCollection);
g_effekseerSetting = nullptr;
}
public:
Expand All @@ -371,6 +448,7 @@ namespace efk
if (g_effekseerSetting == nullptr)
{
g_effekseerSetting = new EffekseerSetting();
g_deviceObjectCollection = new ::EffekseerRendererGL::DeviceObjectCollection();
}
else
{
Expand Down Expand Up @@ -883,9 +961,9 @@ namespace efk
#endif

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
renderer2d = ::EffekseerRendererGL::Renderer::Create(spriteSize, EffekseerRendererGL::OpenGLDeviceType::OpenGLES2);
renderer2d = ::EffekseerRendererGL::Renderer::Create(spriteSize, EffekseerRendererGL::OpenGLDeviceType::OpenGLES2, g_deviceObjectCollection);
#else
renderer2d = ::EffekseerRendererGL::Renderer::Create(spriteSize, EffekseerRendererGL::OpenGLDeviceType::OpenGL2);
renderer2d = ::EffekseerRendererGL::Renderer::Create(spriteSize, EffekseerRendererGL::OpenGLDeviceType::OpenGL2, g_deviceObjectCollection);
#endif

manager2d = ::Effekseer::Manager::Create(8000);
Expand Down Expand Up @@ -1025,6 +1103,8 @@ namespace efk
void EffectManager::update()
{
manager2d->Update();
time_ = 1.0f / 60.0f;
renderer2d->SetTime(time_);
}

#pragma endregion
Expand Down
2 changes: 1 addition & 1 deletion Players/Cocos2d-x_v3/Effekseer.h
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ namespace efk
bool isDistortionEnabled = false;

bool isDistorted = false;

float time_ = 0.0f;
InternalManager* internalManager_ = nullptr;

cocos2d::CustomCommand distortionCommand;
Expand Down
Loading

0 comments on commit b81f121

Please sign in to comment.