mirror of
https://github.com/libretro/RetroArch.git
synced 2025-03-04 16:07:24 +00:00
(Xbox 1) Rewrite Surface.cpp
This commit is contained in:
parent
293740c4d5
commit
676f16b284
@ -1,52 +1,40 @@
|
||||
/**
|
||||
* Surreal 64 Launcher (C) 2003
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: email: buttza@hotmail.com, lantus@lantus-x.com
|
||||
*
|
||||
* Additional code and cleanups: Surreal64 CE Team (http://www.emuxtras.net)
|
||||
*/
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
|
||||
* Copyright (C) 2011-2012 - Daniel De Matteis
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "Surface.h"
|
||||
|
||||
#include "../../../general.h"
|
||||
#include "../../xdk_d3d8.h"
|
||||
|
||||
CSurface::CSurface()
|
||||
{
|
||||
m_pTexture = NULL;
|
||||
m_pVertexBuffer = NULL;
|
||||
m_byR = 255;
|
||||
m_byG = 255;
|
||||
m_byB = 255;
|
||||
m_bLoaded = false;
|
||||
m_x = 0;
|
||||
m_y = 0;
|
||||
}
|
||||
|
||||
CSurface::~CSurface()
|
||||
{
|
||||
Destroy();
|
||||
}
|
||||
|
||||
bool CSurface::Create(const char *szFilename)
|
||||
bool d3d_surface_new(d3d_surface_t *surface, const char *filename)
|
||||
{
|
||||
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
|
||||
|
||||
if (m_bLoaded)
|
||||
Destroy();
|
||||
surface->m_pTexture = NULL;
|
||||
surface->m_pVertexBuffer = NULL;
|
||||
surface->m_byR = 255;
|
||||
surface->m_byG = 255;
|
||||
surface->m_byB = 255;
|
||||
surface->m_bLoaded = false;
|
||||
surface->m_x = 0;
|
||||
surface->m_y = 0;
|
||||
|
||||
HRESULT g_hResult = D3DXCreateTextureFromFileExA(d3d->d3d_render_device, // d3d device
|
||||
szFilename, // filename
|
||||
D3DX_DEFAULT, D3DX_DEFAULT, // width/height
|
||||
HRESULT ret = D3DXCreateTextureFromFileExA(d3d->d3d_render_device, // d3d device
|
||||
filename, // filename
|
||||
D3DX_DEFAULT, // width
|
||||
D3DX_DEFAULT, // height
|
||||
D3DX_DEFAULT, // mipmaps
|
||||
0, // usage
|
||||
D3DFMT_A8R8G8B8, // format
|
||||
@ -54,61 +42,56 @@ bool CSurface::Create(const char *szFilename)
|
||||
D3DX_DEFAULT, // texture filter
|
||||
D3DX_DEFAULT, // mipmapping
|
||||
0, // colorkey
|
||||
&m_imageInfo, // image info
|
||||
&surface->m_imageInfo, // image info
|
||||
NULL, // pallete
|
||||
&m_pTexture); // texture
|
||||
&surface->m_pTexture); // texture
|
||||
|
||||
if (FAILED(g_hResult))
|
||||
if (FAILED(ret))
|
||||
{
|
||||
RARCH_ERR("Error occurred during D3DXCreateTextureFromFileExA().\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// create a vertex buffer for the quad that will display the texture
|
||||
g_hResult = d3d->d3d_render_device->CreateVertexBuffer(4 * sizeof(DrawVerticeFormats),
|
||||
D3DUSAGE_WRITEONLY,
|
||||
D3DFVF_CUSTOMVERTEX,
|
||||
D3DPOOL_MANAGED, &m_pVertexBuffer);
|
||||
if (FAILED(g_hResult))
|
||||
ret = d3d->d3d_render_device->CreateVertexBuffer(4 * sizeof(DrawVerticeFormats),
|
||||
D3DUSAGE_WRITEONLY, D3DFVF_CUSTOMVERTEX, D3DPOOL_MANAGED, &surface->m_pVertexBuffer);
|
||||
|
||||
if (FAILED(ret))
|
||||
{
|
||||
RARCH_ERR("Error occurred during CreateVertexBuffer().\n");
|
||||
m_pTexture->Release();
|
||||
surface->m_pTexture->Release();
|
||||
return false;
|
||||
}
|
||||
|
||||
m_bLoaded = true;
|
||||
surface->m_bLoaded = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CSurface::Destroy()
|
||||
void d3d_surface_free(d3d_surface_t *surface)
|
||||
{
|
||||
// free the vertex buffer
|
||||
if (m_pVertexBuffer)
|
||||
if (surface->m_pVertexBuffer)
|
||||
{
|
||||
m_pVertexBuffer->Release();
|
||||
m_pVertexBuffer = NULL;
|
||||
surface->m_pVertexBuffer->Release();
|
||||
surface->m_pVertexBuffer = NULL;
|
||||
}
|
||||
|
||||
// free the texture
|
||||
if (m_pTexture)
|
||||
if (surface->m_pTexture)
|
||||
{
|
||||
m_pTexture->Release();
|
||||
m_pTexture = NULL;
|
||||
surface->m_pTexture->Release();
|
||||
surface->m_pTexture = NULL;
|
||||
}
|
||||
|
||||
m_bLoaded = false;
|
||||
surface->m_bLoaded = false;
|
||||
}
|
||||
|
||||
bool CSurface::Render(int x, int y)
|
||||
{
|
||||
return Render(x, y, m_imageInfo.Width, m_imageInfo.Height);
|
||||
}
|
||||
|
||||
bool CSurface::Render(int x, int y, int32_t w, int32_t h)
|
||||
bool d3d_surface_render(d3d_surface_t *surface, int x, int y, int32_t w, int32_t h)
|
||||
{
|
||||
xdk_d3d_video_t *d3d = (xdk_d3d_video_t*)driver.video_data;
|
||||
if (m_pTexture == NULL || m_pVertexBuffer == NULL || m_bLoaded == false)
|
||||
|
||||
if (surface->m_pTexture == NULL || surface->m_pVertexBuffer == NULL || surface->m_bLoaded == false)
|
||||
return false;
|
||||
|
||||
float fX = static_cast<float>(x);
|
||||
@ -117,28 +100,28 @@ bool CSurface::Render(int x, int y, int32_t w, int32_t h)
|
||||
// create the new vertices
|
||||
DrawVerticeFormats newVerts[] =
|
||||
{
|
||||
// x, y, z, color, u ,v
|
||||
{fX, fY, 0.0f, /*D3DCOLOR_ARGB(m_byOpacity, m_byR, m_byG, m_byB),*/ 0, 0, 0},
|
||||
{fX + w, fY, 0.0f, /*D3DCOLOR_ARGB(m_byOpacity, m_byR, m_byG, m_byB),*/ 0, 1, 0},
|
||||
{fX + w, fY + h, 0.0f, /*D3DCOLOR_ARGB(m_byOpacity, m_byR, m_byG, m_byB),*/ 0, 1, 1},
|
||||
{fX, fY + h, 0.0f, /*D3DCOLOR_ARGB(m_byOpacity, m_byR, m_byG, m_byB),*/ 0, 0, 1}
|
||||
// x, y, z, color, u ,v
|
||||
{fX, fY, 0.0f, 0, 0, 0},
|
||||
{fX + w, fY, 0.0f, 0, 1, 0},
|
||||
{fX + w, fY + h, 0.0f, 0, 1, 1},
|
||||
{fX, fY + h, 0.0f, 0, 0, 1}
|
||||
};
|
||||
|
||||
// load the existing vertices
|
||||
/*CustomVertex*/DrawVerticeFormats *pCurVerts;
|
||||
DrawVerticeFormats *pCurVerts;
|
||||
|
||||
HRESULT g_hResult = m_pVertexBuffer->Lock(0, 0, (byte **)&pCurVerts, 0);
|
||||
HRESULT ret = surface->m_pVertexBuffer->Lock(0, 0, (unsigned char**)&pCurVerts, 0);
|
||||
|
||||
if (FAILED(g_hResult))
|
||||
if (FAILED(ret))
|
||||
{
|
||||
RARCH_ERR("Error occurred during m_pVertexBuffer->Lock().\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// copy the new verts over the old verts
|
||||
memcpy(pCurVerts, newVerts, 4 * sizeof(DrawVerticeFormats));
|
||||
|
||||
m_pVertexBuffer->Unlock();
|
||||
|
||||
surface->m_pVertexBuffer->Unlock();
|
||||
|
||||
d3d->d3d_render_device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
|
||||
d3d->d3d_render_device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
|
||||
@ -150,9 +133,10 @@ bool CSurface::Render(int x, int y, int32_t w, int32_t h)
|
||||
d3d->d3d_render_device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_TEXTURE);
|
||||
|
||||
// draw the quad
|
||||
d3d->d3d_render_device->SetTexture(0, m_pTexture);
|
||||
d3d->d3d_render_device->SetStreamSource(0, m_pVertexBuffer, sizeof(DrawVerticeFormats));
|
||||
d3d->d3d_render_device->SetTexture(0, surface->m_pTexture);
|
||||
d3d->d3d_render_device->SetStreamSource(0, surface->m_pVertexBuffer, sizeof(DrawVerticeFormats));
|
||||
d3d->d3d_render_device->SetVertexShader(D3DFVF_CUSTOMVERTEX);
|
||||
d3d->d3d_render_device->DrawPrimitive(D3DPT_QUADLIST, 0, 1);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1,58 +1,39 @@
|
||||
/**
|
||||
* Surreal 64 Launcher (C) 2003
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it under
|
||||
* the terms of the GNU General Public License as published by the Free Software
|
||||
* Foundation; either version 2 of the License, or (at your option) any later
|
||||
* version. This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
|
||||
* details. You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. To contact the
|
||||
* authors: email: buttza@hotmail.com, lantus@lantus-x.com
|
||||
*
|
||||
* Additional code and cleanups: Surreal64 CE Team (http://www.emuxtras.net)
|
||||
*/
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2012 - Hans-Kristian Arntzen
|
||||
* Copyright (C) 2011-2012 - Daniel De Matteis
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#ifndef _D3D_SURFACE_H_
|
||||
#define _D3D_SURFACE_H_
|
||||
|
||||
class CSurface
|
||||
#include "../../../xdk/xdk_defines.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
public:
|
||||
CSurface();
|
||||
~CSurface();
|
||||
|
||||
/**
|
||||
* Do functions
|
||||
*/
|
||||
bool Create(const char *szFilename);
|
||||
void Destroy();
|
||||
|
||||
bool Render(int x, int y);
|
||||
bool Render(int x, int y, int32_t w, int32_t h);
|
||||
private:
|
||||
/**
|
||||
* A d3d texture object that will contain the loaded texture
|
||||
* and a d3d vertex buffer object that will contain the vertex
|
||||
* buffer for the quad which will display the texture
|
||||
*/
|
||||
IDirect3DTexture8 *m_pTexture;
|
||||
IDirect3DVertexBuffer8 *m_pVertexBuffer;
|
||||
|
||||
/**
|
||||
* The default render position of the texture
|
||||
*/
|
||||
int m_x, m_y;
|
||||
|
||||
/**
|
||||
* The width and height of the texture
|
||||
*/
|
||||
LPDIRECT3DTEXTURE m_pTexture;
|
||||
LPDIRECT3DVERTEXBUFFER m_pVertexBuffer;
|
||||
int m_x;
|
||||
int m_y;
|
||||
D3DXIMAGE_INFO m_imageInfo;
|
||||
byte m_byR, m_byG, m_byB;
|
||||
unsigned char m_byR;
|
||||
unsigned char m_byG;
|
||||
unsigned char m_byB;
|
||||
bool m_bLoaded;
|
||||
} d3d_surface_t;
|
||||
|
||||
/**
|
||||
* Whether the texture has been created or not
|
||||
*/
|
||||
bool m_bLoaded;
|
||||
};
|
||||
bool d3d_surface_new(d3d_surface_t *surface, const char *filename);
|
||||
void d3d_surface_free(d3d_surface_t *surface);
|
||||
bool d3d_surface_render(d3d_surface_t *surface, int x, int y, int32_t w, int32_t h);
|
||||
|
||||
#endif
|
@ -34,9 +34,9 @@
|
||||
filebrowser_t browser;
|
||||
|
||||
// Rom selector panel with coords
|
||||
CSurface m_menuMainRomSelectPanel;
|
||||
d3d_surface_t m_menuMainRomSelectPanel;
|
||||
// Background image with coords
|
||||
CSurface m_menuMainBG;
|
||||
d3d_surface_t m_menuMainBG;
|
||||
|
||||
// Rom list coords
|
||||
int m_menuMainRomListPos_x;
|
||||
@ -54,7 +54,8 @@ static uint16_t old_input_st = 0;
|
||||
static void display_menubar(void)
|
||||
{
|
||||
//Render background image
|
||||
m_menuMainBG.Render(MENU_MAIN_BG_X, MENU_MAIN_BG_Y);
|
||||
d3d_surface_render(&m_menuMainBG, MENU_MAIN_BG_X, MENU_MAIN_BG_Y,
|
||||
m_menuMainBG.m_imageInfo.Width, m_menuMainBG.m_imageInfo.Height);
|
||||
}
|
||||
|
||||
typedef enum {
|
||||
@ -137,7 +138,7 @@ static void browser_render(filebrowser_t *b, float current_x, float current_y, f
|
||||
//check if this is the currently selected file
|
||||
const char *current_pathname = filebrowser_get_current_path(b);
|
||||
if(strcmp(current_pathname, b->current_dir.list->elems[i].data) == 0)
|
||||
m_menuMainRomSelectPanel.Render(currentX, currentY, ROM_PANEL_WIDTH, ROM_PANEL_HEIGHT);
|
||||
d3d_surface_render(&m_menuMainRomSelectPanel, currentX, currentY, ROM_PANEL_WIDTH, ROM_PANEL_HEIGHT);
|
||||
|
||||
convert_char_to_wchar(rom_basename_w, rom_basename, sizeof(rom_basename_w));
|
||||
d3d->d3d_render_device->GetBackBuffer(-1, D3DBACKBUFFER_TYPE_MONO, &d3d->pFrontBuffer);
|
||||
@ -254,19 +255,19 @@ int menu_init(void)
|
||||
// Load background image
|
||||
if(width == 640)
|
||||
{
|
||||
m_menuMainBG.Create("D:\\Media\\menuMainBG.png");
|
||||
d3d_surface_new(&m_menuMainBG, "D:\\Media\\menuMainBG.png");
|
||||
m_menuMainRomListPos_x = 100;
|
||||
m_menuMainRomListPos_y = 100;
|
||||
}
|
||||
else if(width == 1280)
|
||||
{
|
||||
m_menuMainBG.Create("D:\\Media\\menuMainBG_720p.png");
|
||||
d3d_surface_new(&m_menuMainBG, "D:\\Media\\menuMainBG_720p.png");
|
||||
m_menuMainRomListPos_x = 400;
|
||||
m_menuMainRomListPos_y = 150;
|
||||
}
|
||||
|
||||
// Load rom selector panel
|
||||
m_menuMainRomSelectPanel.Create("D:\\Media\\menuMainRomSelectPanel.png");
|
||||
d3d_surface_new(&m_menuMainRomSelectPanel, "D:\\Media\\menuMainRomSelectPanel.png");
|
||||
|
||||
g_console.mode_switch = MODE_MENU;
|
||||
|
||||
@ -276,6 +277,8 @@ int menu_init(void)
|
||||
void menu_free(void)
|
||||
{
|
||||
filebrowser_free(&browser);
|
||||
d3d_surface_free(&m_menuMainBG);
|
||||
d3d_surface_free(&m_menuMainRomSelectPanel);
|
||||
}
|
||||
|
||||
void menu_loop(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user