mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-23 16:21:15 +00:00
CreateCamera and CreateTexture
This commit is contained in:
parent
c9a985fb86
commit
1170cca8ea
@ -99,6 +99,7 @@ class RendererImpl : public Renderer {
|
|||||||
|
|
||||||
const RendererDataType& ImplementationData() const { return m_data; }
|
const RendererDataType& ImplementationData() const { return m_data; }
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x10174c10
|
||||||
RendererDataType& ImplementationData() { return m_data; }
|
RendererDataType& ImplementationData() { return m_data; }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -115,6 +116,18 @@ class RendererImpl : public Renderer {
|
|||||||
ViewImpl& rView
|
ViewImpl& rView
|
||||||
);
|
);
|
||||||
inline Result CreateMeshBuilder(MeshBuilderImpl& rMesh);
|
inline Result CreateMeshBuilder(MeshBuilderImpl& rMesh);
|
||||||
|
inline Result CreateCamera(CameraImpl& rCamera);
|
||||||
|
inline Result CreateTexture(TextureImpl& rTexture);
|
||||||
|
inline Result CreateTexture(
|
||||||
|
TextureImpl& rTexture,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int bitsPerTexel,
|
||||||
|
const void* pTexels,
|
||||||
|
int texelsArePersistent,
|
||||||
|
int paletteEntryCount,
|
||||||
|
const PaletteEntry* pEntries
|
||||||
|
);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RendererDataType m_data;
|
RendererDataType m_data;
|
||||||
|
|||||||
@ -190,14 +190,33 @@ Group* RendererImpl::CreateGroup(const Group* pParent)
|
|||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016d4b0
|
||||||
|
inline Result RendererCreateCamera(IDirect3DRM2* pD3DRM, IDirect3DRMFrame2*& rpCamera)
|
||||||
|
{
|
||||||
|
return ResultVal(pD3DRM->CreateFrame(NULL, &rpCamera));
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016d420
|
||||||
|
inline Result RendererImpl::CreateCamera(CameraImpl& rCamera)
|
||||||
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!rCamera.ImplementationData());
|
||||||
|
|
||||||
|
return RendererCreateCamera(m_data, rCamera.ImplementationData());
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a1c30
|
// FUNCTION: LEGO1 0x100a1c30
|
||||||
|
// FUNCTION: BETA10 0x1016a980
|
||||||
Camera* RendererImpl::CreateCamera()
|
Camera* RendererImpl::CreateCamera()
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
CameraImpl* camera = new CameraImpl();
|
CameraImpl* camera = new CameraImpl();
|
||||||
if (FAILED(m_data->CreateFrame(NULL, &camera->m_data))) {
|
|
||||||
|
if (!CreateCamera(*camera)) {
|
||||||
delete camera;
|
delete camera;
|
||||||
camera = NULL;
|
camera = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return camera;
|
return camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,39 +328,76 @@ MeshBuilder* RendererImpl::CreateMeshBuilder()
|
|||||||
return meshBuilder;
|
return meshBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016d9c0
|
||||||
inline Result RendererCreateTexture(
|
inline Result RendererCreateTexture(
|
||||||
IDirect3DRM2* renderer,
|
IDirect3DRM2* pRenderer,
|
||||||
IDirect3DRMTexture*& texture,
|
|
||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
int bytesPerPixel,
|
int bytesPerPixel,
|
||||||
void* pBuffer,
|
void* pBuffer,
|
||||||
int useBuffer,
|
int useBuffer,
|
||||||
int paletteSize,
|
int paletteSize,
|
||||||
PaletteEntry* pEntries
|
PaletteEntry* pEntries,
|
||||||
|
IDirect3DRMTexture*& rpTexture
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
TglD3DRMIMAGE* image;
|
|
||||||
Result result;
|
Result result;
|
||||||
|
|
||||||
image = new TglD3DRMIMAGE(width, height, bytesPerPixel, pBuffer, useBuffer, paletteSize, pEntries);
|
TglD3DRMIMAGE* pImage = new TglD3DRMIMAGE(width, height, bytesPerPixel, pBuffer, useBuffer, paletteSize, pEntries);
|
||||||
|
assert(pImage);
|
||||||
|
|
||||||
// TODO: LPDIRECT3DRMTEXTURE2?
|
// TODO: LPDIRECT3DRMTEXTURE2?
|
||||||
result = ResultVal(renderer->CreateTexture(&image->m_image, (LPDIRECT3DRMTEXTURE2*) &texture));
|
result = ResultVal(pRenderer->CreateTexture(&pImage->m_image, (LPDIRECT3DRMTEXTURE2*) &rpTexture));
|
||||||
|
assert(Succeeded(result));
|
||||||
|
assert((rpTexture->AddRef(), rpTexture->Release()) == 1);
|
||||||
|
|
||||||
if (Succeeded(result)) {
|
if (Succeeded(result)) {
|
||||||
result = TextureImpl::SetImage(texture, image);
|
result = TextureImpl::SetImage(rpTexture, pImage);
|
||||||
|
assert(Succeeded(result));
|
||||||
|
|
||||||
if (!Succeeded(result)) {
|
if (!Succeeded(result)) {
|
||||||
texture->Release();
|
rpTexture->Release();
|
||||||
texture = NULL;
|
rpTexture = NULL;
|
||||||
delete image;
|
delete pImage;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
delete image;
|
delete pImage;
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016d910
|
||||||
|
inline Result RendererImpl::CreateTexture(
|
||||||
|
TextureImpl& rTexture,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
int bitsPerTexel,
|
||||||
|
const void* pTexels,
|
||||||
|
int texelsArePersistent,
|
||||||
|
int paletteEntryCount,
|
||||||
|
const PaletteEntry* pEntries
|
||||||
|
)
|
||||||
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!rTexture.ImplementationData());
|
||||||
|
|
||||||
|
return RendererCreateTexture(
|
||||||
|
m_data,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
bitsPerTexel,
|
||||||
|
const_cast<void*>(pTexels),
|
||||||
|
texelsArePersistent,
|
||||||
|
paletteEntryCount,
|
||||||
|
const_cast<PaletteEntry*>(pEntries),
|
||||||
|
rTexture.ImplementationData()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a1f50
|
// FUNCTION: LEGO1 0x100a1f50
|
||||||
|
// FUNCTION: BETA10 0x1016ad00
|
||||||
Texture* RendererImpl::CreateTexture(
|
Texture* RendererImpl::CreateTexture(
|
||||||
int width,
|
int width,
|
||||||
int height,
|
int height,
|
||||||
@ -352,10 +408,11 @@ Texture* RendererImpl::CreateTexture(
|
|||||||
const PaletteEntry* pEntries
|
const PaletteEntry* pEntries
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
|
|
||||||
TextureImpl* texture = new TextureImpl();
|
TextureImpl* texture = new TextureImpl();
|
||||||
if (!Succeeded(RendererCreateTexture(
|
if (!CreateTexture(
|
||||||
m_data,
|
*texture,
|
||||||
texture->m_data,
|
|
||||||
width,
|
width,
|
||||||
height,
|
height,
|
||||||
bitsPerTexel,
|
bitsPerTexel,
|
||||||
@ -363,21 +420,40 @@ Texture* RendererImpl::CreateTexture(
|
|||||||
texelsArePersistent,
|
texelsArePersistent,
|
||||||
paletteEntryCount,
|
paletteEntryCount,
|
||||||
const_cast<PaletteEntry*>(pEntries)
|
const_cast<PaletteEntry*>(pEntries)
|
||||||
))) {
|
)) {
|
||||||
delete texture;
|
delete texture;
|
||||||
texture = NULL;
|
texture = NULL;
|
||||||
}
|
}
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016dcb0
|
||||||
|
inline Result RendererCreateTexture(IDirect3DRM2* pRenderer, IDirect3DRMTexture*& rpTexture)
|
||||||
|
{
|
||||||
|
return RendererCreateTexture(pRenderer, 0, 0, 0, NULL, FALSE, 0, NULL, rpTexture);
|
||||||
|
}
|
||||||
|
|
||||||
|
// FUNCTION: BETA10 0x1016dc20
|
||||||
|
inline Result RendererImpl::CreateTexture(TextureImpl& rTexture)
|
||||||
|
{
|
||||||
|
assert(m_data);
|
||||||
|
assert(!rTexture.ImplementationData());
|
||||||
|
|
||||||
|
return RendererCreateTexture(m_data, rTexture.ImplementationData());
|
||||||
|
}
|
||||||
|
|
||||||
// FUNCTION: LEGO1 0x100a20d0
|
// FUNCTION: LEGO1 0x100a20d0
|
||||||
|
// FUNCTION: BETA10 0x1016ae20
|
||||||
Texture* RendererImpl::CreateTexture()
|
Texture* RendererImpl::CreateTexture()
|
||||||
{
|
{
|
||||||
|
assert(m_data);
|
||||||
|
|
||||||
TextureImpl* texture = new TextureImpl();
|
TextureImpl* texture = new TextureImpl();
|
||||||
if (!Succeeded(RendererCreateTexture(m_data, texture->m_data, 0, 0, 0, NULL, FALSE, 0, NULL))) {
|
if (!CreateTexture(*texture)) {
|
||||||
delete texture;
|
delete texture;
|
||||||
texture = NULL;
|
texture = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return texture;
|
return texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user