mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-02-03 12:31:15 +00:00
Merge branch 'master' into emscripten
This commit is contained in:
commit
453c7cb94a
@ -273,7 +273,11 @@ MxLong Infocenter::Notify(MxParam& p_param)
|
|||||||
else if (m_destLocation != 0) {
|
else if (m_destLocation != 0) {
|
||||||
BackgroundAudioManager()->RaiseVolume();
|
BackgroundAudioManager()->RaiseVolume();
|
||||||
GameState()->SwitchArea(m_destLocation);
|
GameState()->SwitchArea(m_destLocation);
|
||||||
m_destLocation = LegoGameState::e_undefined;
|
|
||||||
|
if (GameState()->m_currentArea != LegoGameState::e_act2main &&
|
||||||
|
GameState()->m_currentArea != LegoGameState::e_act3script) {
|
||||||
|
m_destLocation = LegoGameState::e_undefined;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -268,7 +268,7 @@ void Direct3DRMSoftwareRenderer::DrawTriangleProjected(
|
|||||||
|
|
||||||
Uint8 r, g, b;
|
Uint8 r, g, b;
|
||||||
SDL_Color c0 = ApplyLighting(v0.position, v0.normal, appearance);
|
SDL_Color c0 = ApplyLighting(v0.position, v0.normal, appearance);
|
||||||
SDL_Color c1, c2;
|
SDL_Color c1 = {}, c2 = {};
|
||||||
if (!appearance.flat) {
|
if (!appearance.flat) {
|
||||||
c1 = ApplyLighting(v1.position, v1.normal, appearance);
|
c1 = ApplyLighting(v1.position, v1.normal, appearance);
|
||||||
c2 = ApplyLighting(v2.position, v2.normal, appearance);
|
c2 = ApplyLighting(v2.position, v2.normal, appearance);
|
||||||
@ -436,18 +436,18 @@ void Direct3DRMSoftwareRenderer::DrawTriangleProjected(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct TextureDestroyContext {
|
struct CacheDestroyContext {
|
||||||
Direct3DRMSoftwareRenderer* renderer;
|
Direct3DRMSoftwareRenderer* renderer;
|
||||||
Uint32 textureId;
|
Uint32 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Direct3DRMSoftwareRenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture)
|
void Direct3DRMSoftwareRenderer::AddTextureDestroyCallback(Uint32 id, IDirect3DRMTexture* texture)
|
||||||
{
|
{
|
||||||
auto* ctx = new TextureDestroyContext{this, id};
|
auto* ctx = new CacheDestroyContext{this, id};
|
||||||
texture->AddDestroyCallback(
|
texture->AddDestroyCallback(
|
||||||
[](IDirect3DRMObject* obj, void* arg) {
|
[](IDirect3DRMObject* obj, void* arg) {
|
||||||
auto* ctx = static_cast<TextureDestroyContext*>(arg);
|
auto* ctx = static_cast<CacheDestroyContext*>(arg);
|
||||||
auto& cacheEntry = ctx->renderer->m_textures[ctx->textureId];
|
auto& cacheEntry = ctx->renderer->m_textures[ctx->id];
|
||||||
if (cacheEntry.cached) {
|
if (cacheEntry.cached) {
|
||||||
SDL_UnlockSurface(cacheEntry.cached);
|
SDL_UnlockSurface(cacheEntry.cached);
|
||||||
SDL_DestroySurface(cacheEntry.cached);
|
SDL_DestroySurface(cacheEntry.cached);
|
||||||
@ -525,18 +525,18 @@ MeshCache UploadMesh(const MeshGroup& meshGroup)
|
|||||||
return cache;
|
return cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MeshDestroyContext {
|
|
||||||
Direct3DRMSoftwareRenderer* renderer;
|
|
||||||
Uint32 id;
|
|
||||||
};
|
|
||||||
|
|
||||||
void Direct3DRMSoftwareRenderer::AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh)
|
void Direct3DRMSoftwareRenderer::AddMeshDestroyCallback(Uint32 id, IDirect3DRMMesh* mesh)
|
||||||
{
|
{
|
||||||
auto* ctx = new MeshDestroyContext{this, id};
|
auto* ctx = new CacheDestroyContext{this, id};
|
||||||
mesh->AddDestroyCallback(
|
mesh->AddDestroyCallback(
|
||||||
[](IDirect3DRMObject*, void* arg) {
|
[](IDirect3DRMObject* obj, void* arg) {
|
||||||
auto* ctx = static_cast<MeshDestroyContext*>(arg);
|
auto* ctx = static_cast<CacheDestroyContext*>(arg);
|
||||||
ctx->renderer->m_meshs[ctx->id].meshGroup = nullptr;
|
auto& cacheEntry = ctx->renderer->m_meshs[ctx->id];
|
||||||
|
if (cacheEntry.meshGroup) {
|
||||||
|
cacheEntry.meshGroup = nullptr;
|
||||||
|
cacheEntry.vertices.clear();
|
||||||
|
cacheEntry.indices.clear();
|
||||||
|
}
|
||||||
delete ctx;
|
delete ctx;
|
||||||
},
|
},
|
||||||
ctx
|
ctx
|
||||||
|
|||||||
@ -14,8 +14,8 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
Direct3DRMViewportImpl::Direct3DRMViewportImpl(DWORD width, DWORD height, Direct3DRMRenderer* rendere)
|
Direct3DRMViewportImpl::Direct3DRMViewportImpl(DWORD width, DWORD height, Direct3DRMRenderer* renderer)
|
||||||
: m_width(width), m_height(height), m_renderer(rendere)
|
: m_width(width), m_height(height), m_renderer(renderer)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,12 +7,20 @@
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct Direct3DRMObjectBaseImpl : public T {
|
struct Direct3DRMObjectBaseImpl : public T {
|
||||||
|
Direct3DRMObjectBaseImpl() : T() {}
|
||||||
|
Direct3DRMObjectBaseImpl(const Direct3DRMObjectBaseImpl& other) : m_appData(other.m_appData), T(other)
|
||||||
|
{
|
||||||
|
if (other.m_name) {
|
||||||
|
m_name = SDL_strdup(other.m_name);
|
||||||
|
}
|
||||||
|
}
|
||||||
ULONG Release() override
|
ULONG Release() override
|
||||||
{
|
{
|
||||||
if (IUnknown::m_refCount == 1) {
|
if (T::m_refCount == 1) {
|
||||||
for (auto it = m_callbacks.cbegin(); it != m_callbacks.cend(); it++) {
|
for (auto it = m_callbacks.cbegin(); it != m_callbacks.cend(); it++) {
|
||||||
it->first(this, it->second);
|
it->first(this, it->second);
|
||||||
}
|
}
|
||||||
|
m_callbacks.clear();
|
||||||
}
|
}
|
||||||
SDL_free(m_name);
|
SDL_free(m_name);
|
||||||
return this->T::Release();
|
return this->T::Release();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user