Makefile is now more compatible, whitespace trim.

git-svn-id: https://svn.code.sf.net/p/vbam/code/trunk@98 a31d4220-a93d-0410-bf67-fe4944624d44
This commit is contained in:
Nach 2007-11-19 19:58:21 +00:00
parent acf893c0c7
commit 882dcdff9a
7 changed files with 485 additions and 483 deletions

View File

@ -4,7 +4,8 @@ CFLAGS=-W -Wall -Wno-unused -DHAVE_NETINET_IN_H -DHAVE_ARPA_INET_H -DFINAL_VERSI
CXXFLAGS=${CFLAGS}
ASM=nasm
ASMFLAGS=-w-orphan-labels -f elf -DELF -O1 -Isrc/
LFLAGS=-lz -lpng -lSDL -s
LFLAGS=-lz -lpng `sdl-config --libs`
STRIP=strip -s
MAINDIR=src
SDLDIR=src/sdl
@ -50,6 +51,7 @@ ALL: vba
vba: ${OBJECTS} ${LIB}
$(CPPC) -o $@ ${OBJECTS} ${LIB} ${LFLAGS}
$(STRIP) $@
${RESAMPLEDIR}/libresample.a:
make -C ${RESAMPLEDIR} -f Make

View File

@ -3,7 +3,7 @@
// Copyright (C) 2005 Forgotten and the VBA development team
// 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
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2, or(at your option)
// any later version.
//

View File

@ -1968,7 +1968,7 @@ void MainWnd::OnUpdateOptionsSoundHardwareacceleration(CCmdUI *pCmdUI)
pCmdUI->SetCheck(!theApp.dsoundDisableHardwareAcceleration);
}
void MainWnd::OnOptionsSelectPlugin()
void MainWnd::OnOptionsSelectPlugin()
{
SelectPlugin dlg;

View File

@ -1,176 +1,176 @@
// SelectPlugin.cpp : implementation file
//
#include "stdafx.h"
#include "vba.h"
#include "SelectPlugin.h"
#include "rpi.h"
#include "reg.h"
#include <vector>
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
vector<PluginDesc> rpiPool;
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin dialog
SelectPlugin::SelectPlugin(CWnd* pParent /*=NULL*/)
: CDialog(SelectPlugin::IDD, pParent)
{
//{{AFX_DATA_INIT(SelectPlugin)
//}}AFX_DATA_INIT
}
void SelectPlugin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(SelectPlugin)
DDX_Control(pDX, IDC_COMBO_PLUGIN, m_comboPlugin);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(SelectPlugin, CDialog)
//{{AFX_MSG_MAP(SelectPlugin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin message handlers
void SelectPlugin::OnOK()
{
// TODO: Add extra validation here
if (m_comboPlugin.GetCount() > 0)
{
int nSel = m_comboPlugin.GetCurSel();
if (nSel >= 0 && nSel < rpiPool.size())
strcpy(theApp.pluginName, rpiPool[nSel].sFile);
}
CDialog::OnOK();
}
void SelectPlugin::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL SelectPlugin::OnInitDialog()
{
CDialog::OnInitDialog();
m_comboPlugin.ResetContent();
int nPluginCnt = EnumPlugins();
if (nPluginCnt > 0)
{
for (int i = 0; i < rpiPool.size(); i++)
m_comboPlugin.AddString(rpiPool[i].sDesc);
for (int ii = 0; ii < rpiPool.size(); ii++)
{
if (stricmp(theApp.pluginName, rpiPool[ii].sFile) == 0)
{
m_comboPlugin.SetCurSel(ii);
break;
}
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int SelectPlugin::EnumPlugins()
{
rpiPool.clear();
char sFindFile[MAX_PATH];
char *ptr;
GetModuleFileName(NULL, sFindFile, sizeof(sFindFile));
ptr = strrchr(sFindFile, '\\');
if (ptr)
*ptr = '\0';
strcat(sFindFile, "\\plugins\\*.rpi");
PluginDesc plugDesc;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
memset(&FindFileData, 0, sizeof(FindFileData));
hFind = FindFirstFile(sFindFile, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
if (GetPluginDesc(FindFileData.cFileName, &plugDesc))
rpiPool.push_back(plugDesc);
while (true)
{
memset(&FindFileData, 0, sizeof(FindFileData));
if (!FindNextFile(hFind, &FindFileData))
break;
if (GetPluginDesc(FindFileData.cFileName, &plugDesc))
rpiPool.push_back(plugDesc);
}
FindClose(hFind);
}
return rpiPool.size();
}
bool SelectPlugin::GetPluginDesc(const char *sRpi, PluginDesc *pDesc)
{
HINSTANCE rpiDLL = NULL;
char sFile[MAX_PATH];
char *ptr;
GetModuleFileName(NULL, sFile, sizeof(sFile));
ptr = strrchr(sFile, '\\');
if (ptr)
*ptr = '\0';
strcat(sFile, "\\plugins\\");
strcat(sFile, sRpi);
rpiDLL = LoadLibrary(sFile);
if (!rpiDLL)
return false;
RENDPLUG_GetInfo fnGetInfo = (RENDPLUG_GetInfo) GetProcAddress(rpiDLL, "RenderPluginGetInfo");
RENDPLUG_Output fnOutput = (RENDPLUG_Output) GetProcAddress(rpiDLL, "RenderPluginOutput");
if (fnGetInfo == NULL || fnOutput == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
RENDER_PLUGIN_INFO *pRPI = fnGetInfo();
if (pRPI == NULL)
{
FreeLibrary(rpiDLL);
return false;
}
memset(pDesc, 0, sizeof(PluginDesc));
strcpy(pDesc->sFile, sRpi);
strcpy(pDesc->sDesc, pRPI->Name);
FreeLibrary(rpiDLL);
return true;
}
// SelectPlugin.cpp : implementation file
//
#include "stdafx.h"
#include "vba.h"
#include "SelectPlugin.h"
#include "rpi.h"
#include "reg.h"
#include <vector>
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
vector<PluginDesc> rpiPool;
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin dialog
SelectPlugin::SelectPlugin(CWnd* pParent /*=NULL*/)
: CDialog(SelectPlugin::IDD, pParent)
{
//{{AFX_DATA_INIT(SelectPlugin)
//}}AFX_DATA_INIT
}
void SelectPlugin::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(SelectPlugin)
DDX_Control(pDX, IDC_COMBO_PLUGIN, m_comboPlugin);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(SelectPlugin, CDialog)
//{{AFX_MSG_MAP(SelectPlugin)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin message handlers
void SelectPlugin::OnOK()
{
// TODO: Add extra validation here
if (m_comboPlugin.GetCount() > 0)
{
int nSel = m_comboPlugin.GetCurSel();
if (nSel >= 0 && nSel < rpiPool.size())
strcpy(theApp.pluginName, rpiPool[nSel].sFile);
}
CDialog::OnOK();
}
void SelectPlugin::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
BOOL SelectPlugin::OnInitDialog()
{
CDialog::OnInitDialog();
m_comboPlugin.ResetContent();
int nPluginCnt = EnumPlugins();
if (nPluginCnt > 0)
{
for (int i = 0; i < rpiPool.size(); i++)
m_comboPlugin.AddString(rpiPool[i].sDesc);
for (int ii = 0; ii < rpiPool.size(); ii++)
{
if (stricmp(theApp.pluginName, rpiPool[ii].sFile) == 0)
{
m_comboPlugin.SetCurSel(ii);
break;
}
}
}
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
int SelectPlugin::EnumPlugins()
{
rpiPool.clear();
char sFindFile[MAX_PATH];
char *ptr;
GetModuleFileName(NULL, sFindFile, sizeof(sFindFile));
ptr = strrchr(sFindFile, '\\');
if (ptr)
*ptr = '\0';
strcat(sFindFile, "\\plugins\\*.rpi");
PluginDesc plugDesc;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
memset(&FindFileData, 0, sizeof(FindFileData));
hFind = FindFirstFile(sFindFile, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
if (GetPluginDesc(FindFileData.cFileName, &plugDesc))
rpiPool.push_back(plugDesc);
while (true)
{
memset(&FindFileData, 0, sizeof(FindFileData));
if (!FindNextFile(hFind, &FindFileData))
break;
if (GetPluginDesc(FindFileData.cFileName, &plugDesc))
rpiPool.push_back(plugDesc);
}
FindClose(hFind);
}
return rpiPool.size();
}
bool SelectPlugin::GetPluginDesc(const char *sRpi, PluginDesc *pDesc)
{
HINSTANCE rpiDLL = NULL;
char sFile[MAX_PATH];
char *ptr;
GetModuleFileName(NULL, sFile, sizeof(sFile));
ptr = strrchr(sFile, '\\');
if (ptr)
*ptr = '\0';
strcat(sFile, "\\plugins\\");
strcat(sFile, sRpi);
rpiDLL = LoadLibrary(sFile);
if (!rpiDLL)
return false;
RENDPLUG_GetInfo fnGetInfo = (RENDPLUG_GetInfo) GetProcAddress(rpiDLL, "RenderPluginGetInfo");
RENDPLUG_Output fnOutput = (RENDPLUG_Output) GetProcAddress(rpiDLL, "RenderPluginOutput");
if (fnGetInfo == NULL || fnOutput == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
RENDER_PLUGIN_INFO *pRPI = fnGetInfo();
if (pRPI == NULL)
{
FreeLibrary(rpiDLL);
return false;
}
memset(pDesc, 0, sizeof(PluginDesc));
strcpy(pDesc->sFile, sRpi);
strcpy(pDesc->sDesc, pRPI->Name);
FreeLibrary(rpiDLL);
return true;
}

View File

@ -1,55 +1,55 @@
#if !defined(AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_)
#define AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SelectPlugin.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin dialog
struct PluginDesc
{
char sFile[MAX_PATH];
char sDesc[60];
};
class SelectPlugin : public CDialog
{
// Construction
public:
SelectPlugin(CWnd* pParent = NULL); // standard constructor
int EnumPlugins();
bool GetPluginDesc(const char *sRpi, PluginDesc *pDesc);
// Dialog Data
//{{AFX_DATA(SelectPlugin)
enum { IDD = IDD_SELECT_PLUGIN };
CComboBox m_comboPlugin;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(SelectPlugin)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(SelectPlugin)
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_)
#if !defined(AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_)
#define AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// SelectPlugin.h : header file
//
/////////////////////////////////////////////////////////////////////////////
// SelectPlugin dialog
struct PluginDesc
{
char sFile[MAX_PATH];
char sDesc[60];
};
class SelectPlugin : public CDialog
{
// Construction
public:
SelectPlugin(CWnd* pParent = NULL); // standard constructor
int EnumPlugins();
bool GetPluginDesc(const char *sRpi, PluginDesc *pDesc);
// Dialog Data
//{{AFX_DATA(SelectPlugin)
enum { IDD = IDD_SELECT_PLUGIN };
CComboBox m_comboPlugin;
//}}AFX_DATA
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(SelectPlugin)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
// Generated message map functions
//{{AFX_MSG(SelectPlugin)
virtual void OnOK();
virtual void OnCancel();
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SELECTPLUGIN_H__A097B9D0_7C23_4C1A_A2D3_1AEC07501BBC__INCLUDED_)

View File

@ -1,187 +1,187 @@
#include "stdafx.h"
#include "rpi.h"
extern void SuperEagle(u8*,u32,u8*,u8*,u32,int,int);
static HINSTANCE rpiDLL = NULL;
static RENDPLUG_Output fnOutput = NULL;
static RENDPLUG_GetInfo fnGetInfo = NULL;
static RENDER_PLUGIN_INFO MyPlugInfo;
static RENDER_PLUGIN_OUTP MyPlugOutput;
static int nScaleFactor;
extern int systemRedShift, systemGreenShift, systemBlueShift;
extern int realsystemRedShift, realsystemGreenShift, realsystemBlueShift;
extern int realsystemColorDepth;
u8 *pBuffer16 = NULL;
u32 Buffer16Size = 0;
bool rpiInit(const char *sPluginName)
{
rpiCleanup();
char sBuffer[256];
char *ptr;
GetModuleFileName(NULL, sBuffer, sizeof(sBuffer));
ptr = strrchr(sBuffer, '\\');
if (ptr)
*ptr = '\0';
strcat(sBuffer, "\\plugins\\");
strcat(sBuffer, sPluginName);
rpiDLL = LoadLibrary(sBuffer);
if (!rpiDLL)
return false;
fnGetInfo = (RENDPLUG_GetInfo) GetProcAddress(rpiDLL, "RenderPluginGetInfo");
fnOutput = (RENDPLUG_Output) GetProcAddress(rpiDLL, "RenderPluginOutput");
if (fnGetInfo == NULL || fnOutput == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
RENDER_PLUGIN_INFO *pRPI = fnGetInfo();
if (pRPI == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
memcpy(&MyPlugInfo, pRPI, sizeof(MyPlugInfo));
unsigned long Flags = MyPlugInfo.Flags & 0x0000F0000;
if (Flags == RPI_OUT_SCL2)
{
nScaleFactor = 2;
}
else if (Flags == RPI_OUT_SCL3)
{
nScaleFactor = 3;
}
else if (Flags == RPI_OUT_SCL4)
{
nScaleFactor = 4;
}
else
{
nScaleFactor = 2;
}
return true;
}
void rpiFilter(u8 *srcPtr, u32 srcPitch, u8 *deltaPtr, u8 *dstPtr, u32 dstPitch, int width, int height)
{
u8 *pBuff;
if (realsystemColorDepth == 32)
{
// Kega filters are 16 bit only. Assumes we've forced 16 bit input
ASSERT(systemColorDepth == 16);
u32 bufferNeeded = dstPitch * (height + nScaleFactor) * nScaleFactor;
if (Buffer16Size < bufferNeeded)
{
Buffer16Size = bufferNeeded;
if (pBuffer16)
free(pBuffer16);
pBuffer16 = (u8 *)malloc(Buffer16Size);
}
pBuff = pBuffer16;
}
else
pBuff = dstPtr;
MyPlugOutput.Size = sizeof(MyPlugOutput);
MyPlugOutput.Flags = MyPlugInfo.Flags;
MyPlugOutput.SrcPtr = srcPtr;
MyPlugOutput.SrcPitch = srcPitch;
MyPlugOutput.SrcW = width;
// Without this funky math on the height value, the RPI filter isn't fully
// rendering the frame. I don't like passing in values that seem
// to be greater than the buffer size, but it's the only way to get
// proper results.
MyPlugOutput.SrcH = height+(nScaleFactor/2);
MyPlugOutput.DstPtr = pBuff;
MyPlugOutput.DstPitch = dstPitch;
MyPlugOutput.DstW = width * nScaleFactor;
MyPlugOutput.DstH = (height+(nScaleFactor/2)) * nScaleFactor;
MyPlugOutput.OutW = width * nScaleFactor;
MyPlugOutput.OutH = (height+(nScaleFactor/2)) * nScaleFactor;
fnOutput(&MyPlugOutput);
if (realsystemColorDepth == 32)
{
register int i,j;
int rshiftDiff = realsystemRedShift - systemRedShift;
int gshiftDiff = realsystemGreenShift - systemGreenShift;
int bshiftDiff = realsystemBlueShift - systemBlueShift;
u16 *pI, *pICur;
u32 *pO, *pOCur;
pI = pICur = (u16 *)pBuff;
pO = pOCur = (u32 *)dstPtr;
if (rshiftDiff >= 0)
{
for(j=0;j<height*nScaleFactor;j++)
{
for(i=0;i<width*nScaleFactor;i++)
{
*(pOCur++) = ((*pICur & 0xF800) << rshiftDiff) |
((*pICur & 0x07E0) << gshiftDiff) |
((*pICur & 0x001F) << bshiftDiff);
*pICur++;
}
pI = pICur = (u16 *)((char *)pI + dstPitch);
pO = pOCur = (u32 *)((char *)pO + dstPitch);
}
}
else
{
// red shift is negative. That means we're most likely swapping RGB to BGR
// shift operators don't support negative values.
rshiftDiff = -rshiftDiff;
for(j=0;j<height*nScaleFactor;j++)
{
for(i=0;i<width*nScaleFactor;i++)
{
*(pOCur++) = ((*pICur & 0xF800) >> rshiftDiff) |
((*pICur & 0x07E0) << gshiftDiff) |
((*pICur & 0x001F) << bshiftDiff);
*pICur++;
}
pI = pICur = (u16 *)((char *)pI + dstPitch);
pO = pOCur = (u32 *)((char *)pO + dstPitch);
}
}
}
}
int rpiScaleFactor()
{
return nScaleFactor;
}
void rpiCleanup()
{
if (rpiDLL != NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
}
if (pBuffer16)
{
free(pBuffer16);
pBuffer16 = NULL;
Buffer16Size = 0;
}
}
#include "stdafx.h"
#include "rpi.h"
extern void SuperEagle(u8*,u32,u8*,u8*,u32,int,int);
static HINSTANCE rpiDLL = NULL;
static RENDPLUG_Output fnOutput = NULL;
static RENDPLUG_GetInfo fnGetInfo = NULL;
static RENDER_PLUGIN_INFO MyPlugInfo;
static RENDER_PLUGIN_OUTP MyPlugOutput;
static int nScaleFactor;
extern int systemRedShift, systemGreenShift, systemBlueShift;
extern int realsystemRedShift, realsystemGreenShift, realsystemBlueShift;
extern int realsystemColorDepth;
u8 *pBuffer16 = NULL;
u32 Buffer16Size = 0;
bool rpiInit(const char *sPluginName)
{
rpiCleanup();
char sBuffer[256];
char *ptr;
GetModuleFileName(NULL, sBuffer, sizeof(sBuffer));
ptr = strrchr(sBuffer, '\\');
if (ptr)
*ptr = '\0';
strcat(sBuffer, "\\plugins\\");
strcat(sBuffer, sPluginName);
rpiDLL = LoadLibrary(sBuffer);
if (!rpiDLL)
return false;
fnGetInfo = (RENDPLUG_GetInfo) GetProcAddress(rpiDLL, "RenderPluginGetInfo");
fnOutput = (RENDPLUG_Output) GetProcAddress(rpiDLL, "RenderPluginOutput");
if (fnGetInfo == NULL || fnOutput == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
RENDER_PLUGIN_INFO *pRPI = fnGetInfo();
if (pRPI == NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
return false;
}
memcpy(&MyPlugInfo, pRPI, sizeof(MyPlugInfo));
unsigned long Flags = MyPlugInfo.Flags & 0x0000F0000;
if (Flags == RPI_OUT_SCL2)
{
nScaleFactor = 2;
}
else if (Flags == RPI_OUT_SCL3)
{
nScaleFactor = 3;
}
else if (Flags == RPI_OUT_SCL4)
{
nScaleFactor = 4;
}
else
{
nScaleFactor = 2;
}
return true;
}
void rpiFilter(u8 *srcPtr, u32 srcPitch, u8 *deltaPtr, u8 *dstPtr, u32 dstPitch, int width, int height)
{
u8 *pBuff;
if (realsystemColorDepth == 32)
{
// Kega filters are 16 bit only. Assumes we've forced 16 bit input
ASSERT(systemColorDepth == 16);
u32 bufferNeeded = dstPitch * (height + nScaleFactor) * nScaleFactor;
if (Buffer16Size < bufferNeeded)
{
Buffer16Size = bufferNeeded;
if (pBuffer16)
free(pBuffer16);
pBuffer16 = (u8 *)malloc(Buffer16Size);
}
pBuff = pBuffer16;
}
else
pBuff = dstPtr;
MyPlugOutput.Size = sizeof(MyPlugOutput);
MyPlugOutput.Flags = MyPlugInfo.Flags;
MyPlugOutput.SrcPtr = srcPtr;
MyPlugOutput.SrcPitch = srcPitch;
MyPlugOutput.SrcW = width;
// Without this funky math on the height value, the RPI filter isn't fully
// rendering the frame. I don't like passing in values that seem
// to be greater than the buffer size, but it's the only way to get
// proper results.
MyPlugOutput.SrcH = height+(nScaleFactor/2);
MyPlugOutput.DstPtr = pBuff;
MyPlugOutput.DstPitch = dstPitch;
MyPlugOutput.DstW = width * nScaleFactor;
MyPlugOutput.DstH = (height+(nScaleFactor/2)) * nScaleFactor;
MyPlugOutput.OutW = width * nScaleFactor;
MyPlugOutput.OutH = (height+(nScaleFactor/2)) * nScaleFactor;
fnOutput(&MyPlugOutput);
if (realsystemColorDepth == 32)
{
register int i,j;
int rshiftDiff = realsystemRedShift - systemRedShift;
int gshiftDiff = realsystemGreenShift - systemGreenShift;
int bshiftDiff = realsystemBlueShift - systemBlueShift;
u16 *pI, *pICur;
u32 *pO, *pOCur;
pI = pICur = (u16 *)pBuff;
pO = pOCur = (u32 *)dstPtr;
if (rshiftDiff >= 0)
{
for(j=0;j<height*nScaleFactor;j++)
{
for(i=0;i<width*nScaleFactor;i++)
{
*(pOCur++) = ((*pICur & 0xF800) << rshiftDiff) |
((*pICur & 0x07E0) << gshiftDiff) |
((*pICur & 0x001F) << bshiftDiff);
*pICur++;
}
pI = pICur = (u16 *)((char *)pI + dstPitch);
pO = pOCur = (u32 *)((char *)pO + dstPitch);
}
}
else
{
// red shift is negative. That means we're most likely swapping RGB to BGR
// shift operators don't support negative values.
rshiftDiff = -rshiftDiff;
for(j=0;j<height*nScaleFactor;j++)
{
for(i=0;i<width*nScaleFactor;i++)
{
*(pOCur++) = ((*pICur & 0xF800) >> rshiftDiff) |
((*pICur & 0x07E0) << gshiftDiff) |
((*pICur & 0x001F) << bshiftDiff);
*pICur++;
}
pI = pICur = (u16 *)((char *)pI + dstPitch);
pO = pOCur = (u32 *)((char *)pO + dstPitch);
}
}
}
}
int rpiScaleFactor()
{
return nScaleFactor;
}
void rpiCleanup()
{
if (rpiDLL != NULL)
{
FreeLibrary(rpiDLL);
rpiDLL = NULL;
}
if (pBuffer16)
{
free(pBuffer16);
pBuffer16 = NULL;
Buffer16Size = 0;
}
}

View File

@ -1,63 +1,63 @@
//---------------------------------------------------------------------------------------------------------------------------
// hq2x plugin example - Steve Snake 2004.
// This plugin uses (modified) code by Maxim Stepin - see "hq2x16.asm" for info
// The original code and description of the algorithm can be found at:
// http://www.hiend3d.com/hq2x.html
//---------------------------------------------------------------------------------------------------------------------------
#include <windows.h>
//---------------------------------------------------------------------------------------------------------------------------
typedef struct
{
unsigned long Size;
unsigned long Flags;
void *SrcPtr;
unsigned long SrcPitch;
unsigned long SrcW;
unsigned long SrcH;
void *DstPtr;
unsigned long DstPitch;
unsigned long DstW;
unsigned long DstH;
unsigned long OutW;
unsigned long OutH;
} RENDER_PLUGIN_OUTP;
//---------------------------------------------------------------------------------------------------------------------------
typedef void (*RENDPLUG_Output)(RENDER_PLUGIN_OUTP *);
//---------------------------------------------------------------------------------------------------------------------------
typedef struct
{
char Name[60];
unsigned long Flags;
HMODULE Handle;
RENDPLUG_Output Output;
} RENDER_PLUGIN_INFO;
//---------------------------------------------------------------------------------------------------------------------------
typedef RENDER_PLUGIN_INFO *(*RENDPLUG_GetInfo)(void);
//---------------------------------------------------------------------------------------------------------------------------
#define RPI_VERSION 0x02
#define RPI_MMX_USED 0x000000100
#define RPI_MMX_REQD 0x000000200
#define RPI_555_SUPP 0x000000400
#define RPI_565_SUPP 0x000000800
#define RPI_888_SUPP 0x000001000
#define RPI_OUT_SCL2 0x000020000
#define RPI_OUT_SCL3 0x000030000
#define RPI_OUT_SCL4 0x000040000
//---------------------------------------------------------------------------------------------------------------------------
int rpiScaleFactor();
bool rpiInit(const char *sPluginName);
//---------------------------------------------------------------------------------------------------------------------------
// hq2x plugin example - Steve Snake 2004.
// This plugin uses (modified) code by Maxim Stepin - see "hq2x16.asm" for info
// The original code and description of the algorithm can be found at:
// http://www.hiend3d.com/hq2x.html
//---------------------------------------------------------------------------------------------------------------------------
#include <windows.h>
//---------------------------------------------------------------------------------------------------------------------------
typedef struct
{
unsigned long Size;
unsigned long Flags;
void *SrcPtr;
unsigned long SrcPitch;
unsigned long SrcW;
unsigned long SrcH;
void *DstPtr;
unsigned long DstPitch;
unsigned long DstW;
unsigned long DstH;
unsigned long OutW;
unsigned long OutH;
} RENDER_PLUGIN_OUTP;
//---------------------------------------------------------------------------------------------------------------------------
typedef void (*RENDPLUG_Output)(RENDER_PLUGIN_OUTP *);
//---------------------------------------------------------------------------------------------------------------------------
typedef struct
{
char Name[60];
unsigned long Flags;
HMODULE Handle;
RENDPLUG_Output Output;
} RENDER_PLUGIN_INFO;
//---------------------------------------------------------------------------------------------------------------------------
typedef RENDER_PLUGIN_INFO *(*RENDPLUG_GetInfo)(void);
//---------------------------------------------------------------------------------------------------------------------------
#define RPI_VERSION 0x02
#define RPI_MMX_USED 0x000000100
#define RPI_MMX_REQD 0x000000200
#define RPI_555_SUPP 0x000000400
#define RPI_565_SUPP 0x000000800
#define RPI_888_SUPP 0x000001000
#define RPI_OUT_SCL2 0x000020000
#define RPI_OUT_SCL3 0x000030000
#define RPI_OUT_SCL4 0x000040000
//---------------------------------------------------------------------------------------------------------------------------
int rpiScaleFactor();
bool rpiInit(const char *sPluginName);
void rpiFilter(u8 *srcPtr, u32 srcPitch, u8 *deltaPtr, u8 *dstPtr, u32 dstPitch, int width, int height);
void rpiCleanup();
void rpiCleanup();