mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
Link the video plugin statically into the main binary on OS X.
This makes the OS X build more robust and should help pave the way for the integration of the video plugins as well as LTO. There are now no more global class level namespace conflicts left, as evidenced by the fact that Dolphin can be linked with -all_load, not that you would want to. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@6958 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
@ -76,17 +76,20 @@ int DynamicLibrary::Load(const char* filename)
|
||||
|
||||
#ifdef _WIN32
|
||||
library = LoadLibrary(filename);
|
||||
#else
|
||||
#elif defined __linux__
|
||||
// RTLD_NOW: resolve all symbols on load
|
||||
// RTLD_LOCAL: don't resolve symbols for other libraries
|
||||
library = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
|
||||
#else
|
||||
library = RTLD_SELF;
|
||||
return 1;
|
||||
#endif
|
||||
|
||||
DEBUG_LOG(COMMON, "DL: LoadLibrary: %s(%p)", filename, library);
|
||||
|
||||
if (!library) {
|
||||
ERROR_LOG(COMMON, "DL: Error loading DLL %s: %s", filename,
|
||||
DllGetLastError());
|
||||
DllGetLastError());
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -104,33 +107,35 @@ int DynamicLibrary::Load(const char* filename)
|
||||
int DynamicLibrary::Unload()
|
||||
{
|
||||
INFO_LOG(COMMON, "DL: Unloading dynamic library %s", library_file.c_str());
|
||||
int retval;
|
||||
if (!IsLoaded()) { // library != null
|
||||
int retval;
|
||||
if (!IsLoaded()) { // library != null
|
||||
ERROR_LOG(COMMON, "DL: Unload failed for %s: not loaded",
|
||||
library_file.c_str());
|
||||
PanicAlert("DL: Unload failed %s: not loaded",
|
||||
library_file.c_str());
|
||||
return 0;
|
||||
}
|
||||
library_file.c_str());
|
||||
PanicAlert("DL: Unload failed %s: not loaded",
|
||||
library_file.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEBUG_LOG(COMMON, "DL: FreeLibrary: %s %p\n",
|
||||
library_file.c_str(), library);
|
||||
DEBUG_LOG(COMMON, "DL: FreeLibrary: %s %p\n",
|
||||
library_file.c_str(), library);
|
||||
#ifdef _WIN32
|
||||
retval = FreeLibrary(library);
|
||||
retval = FreeLibrary(library);
|
||||
#else
|
||||
retval = dlclose(library)?0:1;
|
||||
if (library == RTLD_SELF)
|
||||
return 1;
|
||||
else
|
||||
retval = dlclose(library) ? 0 : 1;
|
||||
#endif
|
||||
|
||||
if (! retval) {
|
||||
ERROR_LOG(COMMON, "DL: Unload failed %s: %s",
|
||||
library_file.c_str(),
|
||||
DllGetLastError());
|
||||
}
|
||||
library = 0;
|
||||
if (! retval) {
|
||||
ERROR_LOG(COMMON, "DL: Unload failed %s: %s",
|
||||
library_file.c_str(), DllGetLastError());
|
||||
}
|
||||
library = 0;
|
||||
|
||||
INFO_LOG(COMMON, "DL: Done unloading dynamic library %s",
|
||||
library_file.c_str());
|
||||
return retval;
|
||||
return retval;
|
||||
}
|
||||
|
||||
// Returns the address where symbol funcname is loaded or NULL on failure
|
||||
@ -156,11 +161,10 @@ void* DynamicLibrary::Get(const char* funcname) const
|
||||
if (!retval)
|
||||
{
|
||||
WARN_LOG(COMMON, "DL: Symbol %s missing in %s (error: %s)\n",
|
||||
funcname, library_file.c_str(),
|
||||
DllGetLastError());
|
||||
funcname, library_file.c_str(), DllGetLastError());
|
||||
}
|
||||
|
||||
INFO_LOG(COMMON, "DL: Done getting symbol %s: %s", library_file.c_str(),
|
||||
funcname);
|
||||
funcname);
|
||||
return retval;
|
||||
}
|
||||
|
@ -30,18 +30,18 @@ PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo
|
||||
Video_Screenshot = 0;
|
||||
Video_AddMessage = 0;
|
||||
Video_AccessEFB = 0;
|
||||
Video_SetRendering = 0;
|
||||
Video_CommandProcessorRead16 = 0;
|
||||
Video_CommandProcessorWrite16 = 0;
|
||||
Video_PixelEngineRead16 = 0;
|
||||
Video_PixelEngineWrite16 = 0;
|
||||
Video_PixelEngineWrite32 = 0;
|
||||
Video_GatherPipeBursted = 0;
|
||||
Video_WaitForFrameFinish = 0;
|
||||
Video_SetRendering = 0;
|
||||
Video_CommandProcessorRead16 = 0;
|
||||
Video_CommandProcessorWrite16 = 0;
|
||||
Video_PixelEngineRead16 = 0;
|
||||
Video_PixelEngineWrite16 = 0;
|
||||
Video_PixelEngineWrite32 = 0;
|
||||
Video_GatherPipeBursted = 0;
|
||||
Video_WaitForFrameFinish = 0;
|
||||
Video_IsFifoBusy = 0;
|
||||
Video_AbortFrame = 0;
|
||||
|
||||
Video_Prepare = reinterpret_cast<TVideo_Prepare>
|
||||
Video_Prepare = reinterpret_cast<TVideo_Prepare>
|
||||
(LoadSymbol("Video_Prepare"));
|
||||
Video_BeginField = reinterpret_cast<TVideo_BeginField>
|
||||
(LoadSymbol("Video_BeginField"));
|
||||
@ -59,43 +59,43 @@ PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo
|
||||
(LoadSymbol("Video_AccessEFB"));
|
||||
Video_SetRendering = reinterpret_cast<TVideo_SetRendering>
|
||||
(LoadSymbol("Video_SetRendering"));
|
||||
Video_CommandProcessorRead16 = reinterpret_cast<TVideo_Read16>
|
||||
Video_CommandProcessorRead16 = reinterpret_cast<TVideo_Read16>
|
||||
(LoadSymbol("Video_CommandProcessorRead16"));
|
||||
Video_CommandProcessorWrite16 = reinterpret_cast<TVideo_Write16>
|
||||
Video_CommandProcessorWrite16 = reinterpret_cast<TVideo_Write16>
|
||||
(LoadSymbol("Video_CommandProcessorWrite16"));
|
||||
Video_PixelEngineRead16 = reinterpret_cast<TVideo_Read16>
|
||||
Video_PixelEngineRead16 = reinterpret_cast<TVideo_Read16>
|
||||
(LoadSymbol("Video_PixelEngineRead16"));
|
||||
Video_PixelEngineWrite16 = reinterpret_cast<TVideo_Write16>
|
||||
Video_PixelEngineWrite16 = reinterpret_cast<TVideo_Write16>
|
||||
(LoadSymbol("Video_PixelEngineWrite16"));
|
||||
Video_PixelEngineWrite32 = reinterpret_cast<TVideo_Write32>
|
||||
Video_PixelEngineWrite32 = reinterpret_cast<TVideo_Write32>
|
||||
(LoadSymbol("Video_PixelEngineWrite32"));
|
||||
Video_GatherPipeBursted = reinterpret_cast<TVideo_GatherPipeBursted>
|
||||
Video_GatherPipeBursted = reinterpret_cast<TVideo_GatherPipeBursted>
|
||||
(LoadSymbol("Video_GatherPipeBursted"));
|
||||
Video_WaitForFrameFinish = reinterpret_cast<TVideo_WaitForFrameFinish>
|
||||
Video_WaitForFrameFinish = reinterpret_cast<TVideo_WaitForFrameFinish>
|
||||
(LoadSymbol("Video_WaitForFrameFinish"));
|
||||
Video_IsFifoBusy = reinterpret_cast<TVideo_IsFifoBusy>
|
||||
Video_IsFifoBusy = reinterpret_cast<TVideo_IsFifoBusy>
|
||||
(LoadSymbol("Video_IsFifoBusy"));
|
||||
Video_AbortFrame = reinterpret_cast<TVideo_AbortFrame>
|
||||
Video_AbortFrame = reinterpret_cast<TVideo_AbortFrame>
|
||||
(LoadSymbol("Video_AbortFrame"));
|
||||
if ((Video_Prepare != 0) &&
|
||||
(Video_BeginField != 0) &&
|
||||
(Video_EndField != 0) &&
|
||||
(Video_EnterLoop != 0) &&
|
||||
(Video_ExitLoop != 0) &&
|
||||
(Video_Screenshot != 0) &&
|
||||
(Video_AddMessage != 0) &&
|
||||
(Video_SetRendering != 0) &&
|
||||
(Video_AccessEFB != 0) &&
|
||||
(Video_SetRendering != 0) &&
|
||||
(Video_CommandProcessorRead16 != 0) &&
|
||||
(Video_CommandProcessorWrite16 != 0) &&
|
||||
(Video_PixelEngineRead16 != 0) &&
|
||||
(Video_PixelEngineWrite16 != 0) &&
|
||||
(Video_PixelEngineWrite32 != 0) &&
|
||||
(Video_GatherPipeBursted != 0) &&
|
||||
(Video_WaitForFrameFinish != 0) &&
|
||||
(Video_IsFifoBusy != 0) &&
|
||||
(Video_AbortFrame != 0))
|
||||
if ((Video_Prepare != 0) &&
|
||||
(Video_BeginField != 0) &&
|
||||
(Video_EndField != 0) &&
|
||||
(Video_EnterLoop != 0) &&
|
||||
(Video_ExitLoop != 0) &&
|
||||
(Video_Screenshot != 0) &&
|
||||
(Video_AddMessage != 0) &&
|
||||
(Video_SetRendering != 0) &&
|
||||
(Video_AccessEFB != 0) &&
|
||||
(Video_SetRendering != 0) &&
|
||||
(Video_CommandProcessorRead16 != 0) &&
|
||||
(Video_CommandProcessorWrite16 != 0) &&
|
||||
(Video_PixelEngineRead16 != 0) &&
|
||||
(Video_PixelEngineWrite16 != 0) &&
|
||||
(Video_PixelEngineWrite32 != 0) &&
|
||||
(Video_GatherPipeBursted != 0) &&
|
||||
(Video_WaitForFrameFinish != 0) &&
|
||||
(Video_IsFifoBusy != 0) &&
|
||||
(Video_AbortFrame != 0))
|
||||
validVideo = true;
|
||||
}
|
||||
|
||||
|
@ -27,7 +27,7 @@ typedef void (__cdecl* TVideo_Prepare)();
|
||||
typedef void (__cdecl* TVideo_SendFifoData)(u8*,u32);
|
||||
typedef void (__cdecl* TVideo_BeginField)(u32, FieldType, u32, u32);
|
||||
typedef void (__cdecl* TVideo_EndField)();
|
||||
typedef bool (__cdecl* TVideo_Screenshot)(const char* filename);
|
||||
typedef void (__cdecl* TVideo_Screenshot)(const char* filename);
|
||||
typedef void (__cdecl* TVideo_EnterLoop)();
|
||||
typedef void (__cdecl* TVideo_ExitLoop)();
|
||||
typedef void (__cdecl* TVideo_SetRendering)(bool bEnabled);
|
||||
|
@ -125,12 +125,6 @@ CPluginInfo::CPluginInfo(const char *_rFilename)
|
||||
: m_Filename(_rFilename)
|
||||
, m_Valid(false)
|
||||
{
|
||||
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
|
||||
{
|
||||
PanicAlertT("Can't find plugin %s", _rFilename);
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if the functions that are common to all plugins are present
|
||||
Common::CPlugin *plugin = new Common::CPlugin(_rFilename);
|
||||
if (plugin->IsValid())
|
||||
@ -174,32 +168,7 @@ void CPluginManager::GetPluginInfo(CPluginInfo *&info, std::string Filename)
|
||||
below. */
|
||||
void *CPluginManager::LoadPlugin(const char *_rFilename)
|
||||
{
|
||||
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str())) {
|
||||
PanicAlertT("Error loading plugin %s: can't find file. Please re-select your plugins.", _rFilename);
|
||||
return NULL;
|
||||
}
|
||||
/* Avoid calling LoadLibrary() again and instead point to the plugin info that we found when
|
||||
Dolphin was started */
|
||||
CPluginInfo *info = NULL;
|
||||
GetPluginInfo(info, _rFilename);
|
||||
if (!info) {
|
||||
PanicAlertT("Error loading %s: can't read info", _rFilename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
PLUGIN_TYPE type = info->GetPluginInfo().Type;
|
||||
Common::CPlugin *plugin = NULL;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case PLUGIN_TYPE_VIDEO:
|
||||
plugin = new Common::PluginVideo(_rFilename);
|
||||
break;
|
||||
|
||||
default:
|
||||
PanicAlertT("Trying to load unsupported type %d", type);
|
||||
return NULL;
|
||||
}
|
||||
Common::CPlugin *plugin = new Common::PluginVideo(_rFilename);
|
||||
|
||||
// Check that the plugin has all the common and all the type specific functions
|
||||
if (!plugin->IsValid())
|
||||
@ -296,12 +265,6 @@ void CPluginManager::EmuStateChange(PLUGIN_EMUSTATE newState)
|
||||
// Open config window. Input: _rFilename = Plugin filename , Type = Plugin type
|
||||
void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename, PLUGIN_TYPE Type)
|
||||
{
|
||||
if (! File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
|
||||
{
|
||||
PanicAlertT("Can't find plugin %s", _rFilename);
|
||||
return;
|
||||
}
|
||||
|
||||
switch(Type)
|
||||
{
|
||||
case PLUGIN_TYPE_VIDEO:
|
||||
@ -318,12 +281,6 @@ void CPluginManager::OpenConfig(void* _Parent, const char *_rFilename, PLUGIN_TY
|
||||
// Open debugging window. Type = Video or DSP. Show = Show or hide window.
|
||||
void *CPluginManager::OpenDebug(void* _Parent, const char *_rFilename, PLUGIN_TYPE Type, bool Show)
|
||||
{
|
||||
if (!File::Exists((File::GetPluginsDirectory() + _rFilename).c_str()))
|
||||
{
|
||||
PanicAlert("Can't find plugin %s", _rFilename);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
switch(Type)
|
||||
{
|
||||
case PLUGIN_TYPE_VIDEO:
|
||||
|
@ -29,10 +29,6 @@
|
||||
#include "MemoryView.h"
|
||||
#include "HW/DSPLLE/DSPSymbols.h"
|
||||
|
||||
// Define these here to avoid undefined symbols while still saving functionality
|
||||
void Host_NotifyMapLoaded() {}
|
||||
void Host_UpdateBreakPointView() {}
|
||||
|
||||
DSPDebuggerLLE* m_DebuggerFrame = NULL;
|
||||
|
||||
BEGIN_EVENT_TABLE(DSPDebuggerLLE, wxPanel)
|
||||
|
@ -19,7 +19,7 @@
|
||||
#include "DSPRegisterView.h"
|
||||
|
||||
|
||||
wxString CRegTable::GetValue(int row, int col)
|
||||
wxString CDSPRegTable::GetValue(int row, int col)
|
||||
{
|
||||
if (row < 32) // 32 "normal" regs
|
||||
{
|
||||
@ -33,11 +33,11 @@ wxString CRegTable::GetValue(int row, int col)
|
||||
return wxString::FromAscii("");
|
||||
}
|
||||
|
||||
void CRegTable::SetValue(int, int, const wxString &)
|
||||
void CDSPRegTable::SetValue(int, int, const wxString &)
|
||||
{
|
||||
}
|
||||
|
||||
void CRegTable::UpdateCachedRegs()
|
||||
void CDSPRegTable::UpdateCachedRegs()
|
||||
{
|
||||
if (m_CachedCounter == g_dsp.step_counter)
|
||||
{
|
||||
@ -53,7 +53,7 @@ void CRegTable::UpdateCachedRegs()
|
||||
}
|
||||
}
|
||||
|
||||
wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
|
||||
wxGridCellAttr *CDSPRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
|
||||
{
|
||||
wxGridCellAttr *attr = new wxGridCellAttr();
|
||||
|
||||
@ -79,7 +79,7 @@ wxGridCellAttr *CRegTable::GetAttr(int row, int col, wxGridCellAttr::wxAttrKind)
|
||||
DSPRegisterView::DSPRegisterView(wxWindow *parent, wxWindowID id)
|
||||
: wxGrid(parent, id, wxDefaultPosition, wxSize(130, 120))
|
||||
{
|
||||
SetTable(new CRegTable(), true);
|
||||
SetTable(new CDSPRegTable(), true);
|
||||
SetRowLabelSize(0);
|
||||
SetColLabelSize(0);
|
||||
DisableDragRowSize();
|
||||
@ -89,6 +89,6 @@ DSPRegisterView::DSPRegisterView(wxWindow *parent, wxWindowID id)
|
||||
|
||||
void DSPRegisterView::Update()
|
||||
{
|
||||
((CRegTable *)GetTable())->UpdateCachedRegs();
|
||||
((CDSPRegTable *)GetTable())->UpdateCachedRegs();
|
||||
ForceRefresh();
|
||||
}
|
||||
|
@ -21,17 +21,17 @@
|
||||
#include <wx/grid.h>
|
||||
|
||||
|
||||
class CRegTable : public wxGridTableBase
|
||||
class CDSPRegTable : public wxGridTableBase
|
||||
{
|
||||
private:
|
||||
u64 m_CachedCounter;
|
||||
u16 m_CachedRegs[32];
|
||||
bool m_CachedRegHasChanged[32];
|
||||
|
||||
DECLARE_NO_COPY_CLASS(CRegTable);
|
||||
DECLARE_NO_COPY_CLASS(CDSPRegTable);
|
||||
|
||||
public:
|
||||
CRegTable()
|
||||
CDSPRegTable()
|
||||
{
|
||||
memset(m_CachedRegs, 0, sizeof(m_CachedRegs));
|
||||
memset(m_CachedRegHasChanged, 0, sizeof(m_CachedRegHasChanged));
|
||||
|
@ -251,8 +251,10 @@ void CConfigMain::UpdateGUI()
|
||||
PathsPage->Disable();
|
||||
|
||||
|
||||
#if defined _WIN32 || defined __linux__
|
||||
// Disable stuff on PluginsPage
|
||||
GraphicSelection->Disable();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -434,8 +436,10 @@ void CConfigMain::InitializeGUIValues()
|
||||
ApploaderPath->SetPath(wxString(startup_params.m_strApploader.c_str(), *wxConvCurrent));
|
||||
|
||||
|
||||
#if defined _WIN32 || defined __linux__
|
||||
// Plugins
|
||||
FillChoiceBox(GraphicSelection, PLUGIN_TYPE_VIDEO, startup_params.m_strVideoPlugin);
|
||||
#endif
|
||||
}
|
||||
|
||||
void CConfigMain::InitializeGUITooltips()
|
||||
@ -501,10 +505,12 @@ void CConfigMain::CreateGUIControls()
|
||||
Notebook->AddPage(GeneralPage, _("General"));
|
||||
Notebook->AddPage(DisplayPage, _("Display"));
|
||||
Notebook->AddPage(AudioPage, _("Audio"));
|
||||
Notebook->AddPage(GamecubePage, _("GC"));
|
||||
Notebook->AddPage(GamecubePage, _("Gamecube"));
|
||||
Notebook->AddPage(WiiPage, _("Wii"));
|
||||
Notebook->AddPage(PathsPage, _("Paths"));
|
||||
#if defined _WIN32 || defined __linux__
|
||||
Notebook->AddPage(PluginsPage, _("Plugins"));
|
||||
#endif
|
||||
|
||||
|
||||
// General page
|
||||
@ -865,6 +871,7 @@ void CConfigMain::CreateGUIControls()
|
||||
PathsPage->SetSizer(sPathsPage);
|
||||
|
||||
|
||||
#if defined _WIN32 || defined __linux__
|
||||
// Plugins page
|
||||
sbGraphicsPlugin = new wxStaticBoxSizer(wxHORIZONTAL, PluginsPage, _("Graphics"));
|
||||
GraphicSelection = new wxChoice(PluginsPage, ID_GRAPHIC_CB, wxDefaultPosition, wxDefaultSize, 0, NULL, 0, wxDefaultValidator);
|
||||
@ -879,6 +886,7 @@ void CConfigMain::CreateGUIControls()
|
||||
sPluginsPage->Add(sbGraphicsPlugin, 0, wxEXPAND|wxALL, 5);
|
||||
|
||||
PluginsPage->SetSizer(sPluginsPage);
|
||||
#endif
|
||||
|
||||
|
||||
m_Ok = new wxButton(this, wxID_OK);
|
||||
|
@ -10,8 +10,8 @@ files = [
|
||||
]
|
||||
|
||||
libs = [
|
||||
'audiocommon', 'core', 'dspcore', 'lzo2', 'discio', 'bdisasm',
|
||||
'inputcommon', 'common', 'lua', 'z', 'sfml-network',
|
||||
'audiocommon', 'bdisasm', 'common', 'core', 'discio', 'dspcore',
|
||||
'inputcommon', 'lua', 'lzo2', 'sfml-network', 'z', 'GLEW', 'SOIL',
|
||||
]
|
||||
|
||||
wxlibs = [ ]
|
||||
@ -62,9 +62,8 @@ else:
|
||||
if sys.platform == 'win32':
|
||||
files += [ "stdafx.cpp" ]
|
||||
elif sys.platform == 'darwin':
|
||||
ldflags += [ '-Wl,-pagezero_size,0x1000' ]
|
||||
ldflags += [ '-Wl,-ObjC' ] # XXX Hack to include wxGLCanvas
|
||||
libs += [ 'iconv' ]
|
||||
ldflags += [ '-Wl,-force_load,' + env['libvideo'][0].path ]
|
||||
exe = '#' + env['prefix'] + '/Dolphin.app/Contents/MacOS/Dolphin'
|
||||
|
||||
if env['HAVE_WX']:
|
||||
|
@ -40,7 +40,6 @@ files = [
|
||||
'VideoState.cpp',
|
||||
'XFBConvert.cpp',
|
||||
'XFMemory.cpp',
|
||||
'XFMemory.cpp',
|
||||
'XFStructs.cpp',
|
||||
'memcpy_amd.cpp',
|
||||
]
|
||||
|
@ -2070,13 +2070,13 @@ void TexDecoder_SetTexFmtOverlayOptions(bool enable, bool center)
|
||||
|
||||
PC_TexFormat TexDecoder_Decode(u8 *dst, const u8 *src, int width, int height, int texformat, int tlutaddr, int tlutfmt,bool rgbaOnly)
|
||||
{
|
||||
PC_TexFormat retval = PC_TEX_FMT_NONE;
|
||||
|
||||
if (g_Config.bEnableOpenCL)
|
||||
retval = TexDecoder_Decode_OpenCL(dst, src, width, height, texformat, tlutaddr, tlutfmt, rgbaOnly);
|
||||
|
||||
if(retval == PC_TEX_FMT_NONE)
|
||||
retval = rgbaOnly ? TexDecoder_Decode_RGBA((u32*)dst,src,width,height,texformat,tlutaddr,tlutfmt) : TexDecoder_Decode_real(dst,src,width,height,texformat,tlutaddr,tlutfmt);
|
||||
PC_TexFormat retval = TexDecoder_Decode_OpenCL(dst, src,
|
||||
width, height, texformat, tlutaddr, tlutfmt, rgbaOnly);
|
||||
if (retval == PC_TEX_FMT_NONE)
|
||||
retval = rgbaOnly ? TexDecoder_Decode_RGBA((u32*)dst, src,
|
||||
width, height, texformat, tlutaddr, tlutfmt)
|
||||
: TexDecoder_Decode_real(dst, src,
|
||||
width, height, texformat, tlutaddr, tlutfmt);
|
||||
|
||||
if ((!TexFmt_Overlay_Enable)|| (retval == PC_TEX_FMT_NONE))
|
||||
return retval;
|
||||
|
Reference in New Issue
Block a user