1
0
mirror of https://github.com/blupi-games/planetblupi synced 2024-12-30 10:15:36 +01:00

Remove absolutly all ddraw stuff from pixmap

This commit is contained in:
Mathieu Schroeter 2017-02-05 10:48:20 +01:00
parent 44838d8156
commit 71ba1194d1
4 changed files with 41 additions and 95 deletions

View File

@ -147,7 +147,7 @@ void UpdateFrame(void)
rcRect.top = 0; rcRect.top = 0;
rcRect.right = LXIMAGE; rcRect.right = LXIMAGE;
rcRect.bottom = LYIMAGE; rcRect.bottom = LYIMAGE;
g_pPixmap->DrawImage(-1, CHBACK, rcRect, 1); // dessine le fond g_pPixmap->DrawImage(-1, CHBACK, rcRect); // dessine le fond
} }
if ( phase == WM_PHASE_INTRO1 || if ( phase == WM_PHASE_INTRO1 ||
@ -499,13 +499,11 @@ static bool DoInit(HINSTANCE hInstance, LPSTR lpCmdLine, int nCmdShow)
if ( !g_pPixmap->Cache(CHGROUND, "image\\init.blp", totalDim, iconDim) ) if ( !g_pPixmap->Cache(CHGROUND, "image\\init.blp", totalDim, iconDim) )
return false; return false;
g_pPixmap->SetDebug(false);
rcRect.left = 0; rcRect.left = 0;
rcRect.top = 0; rcRect.top = 0;
rcRect.right = LXIMAGE; rcRect.right = LXIMAGE;
rcRect.bottom = LYIMAGE; rcRect.bottom = LYIMAGE;
g_pPixmap->DrawImage(-1, CHBACK, rcRect, 1); // dessine le fond g_pPixmap->DrawImage(-1, CHBACK, rcRect); // dessine le fond
g_pPixmap->Display(); g_pPixmap->Display();
totalDim.x = DIMCELX*2*16; totalDim.x = DIMCELX*2*16;

View File

@ -644,8 +644,7 @@ void CDecor::BuildMoveFloor(int x, int y, POINT pos, int rank)
m_move[rank].channel, m_move[rank].channel,
m_move[rank].icon, 0); m_move[rank].icon, 0);
m_pPixmap->DrawIcon(-1, m_move[rank].channel, 0, m_pPixmap->DrawIcon(-1, m_move[rank].channel, 0, pos, true);
pos, 0, true);
} }
else else
{ {
@ -1032,7 +1031,7 @@ void CDecor::Build(RECT clip, POINT posMouse)
} }
// Dessine tous les sols fixes. // Dessine tous les sols fixes.
m_pPixmap->DrawImage(-1, CHGROUND, clip, 1); m_pPixmap->DrawImage(-1, CHGROUND, clip);
width = clip.right-clip.left; width = clip.right-clip.left;
height = clip.bottom-clip.top; height = clip.bottom-clip.top;

View File

@ -5,14 +5,12 @@
#include <stdio.h> #include <stdio.h>
#include <io.h> #include <io.h>
#include <string> #include <string>
#include <ddraw.h>
#include <SDL.h> #include <SDL.h>
#include <SDL_surface.h> #include <SDL_surface.h>
#include <SDL_log.h> #include <SDL_log.h>
#include "def.h" #include "def.h"
#include "pixmap.h" #include "pixmap.h"
#include "misc.h" #include "misc.h"
#include "ddutil.h"
#include "blupi.h" #include "blupi.h"
@ -42,10 +40,6 @@ CPixmap::CPixmap()
m_lpSDLTexture[i] = NULL; m_lpSDLTexture[i] = NULL;
} }
// initialize special effects structure
ZeroMemory(&m_DDbltfx, sizeof(m_DDbltfx));
m_DDbltfx.dwSize = sizeof(m_DDbltfx);
m_lpCurrentCursor = nullptr; m_lpCurrentCursor = nullptr;
} }
@ -74,14 +68,6 @@ CPixmap::~CPixmap()
} }
} }
void CPixmap::SetDebug(bool bDebug)
{
m_bDebug = bDebug;
DDSetDebug(bDebug);
}
// Crée l'objet DirectDraw principal. // Crée l'objet DirectDraw principal.
// Retourne false en cas d'erreur. // Retourne false en cas d'erreur.
@ -117,15 +103,9 @@ void CPixmap::Fill(RECT rect, COLORREF color)
// Effectue un appel BltFast. // Effectue un appel BltFast.
// Les modes sont 0=transparent, 1=opaque. // Les modes sont 0=transparent, 1=opaque.
HRESULT CPixmap::BltFast(int chDst, int channel, int CPixmap::BltFast(int chDst, int channel, POINT dst, RECT rcRect)
POINT dst, RECT rcRect, int mode)
{ {
DWORD dwTrans; int res, limit;
HRESULT ddrval = DD_OK;
int limit;
if ( mode == 0 ) dwTrans = DDBLTFAST_SRCCOLORKEY;
else dwTrans = DDBLTFAST_NOCOLORKEY;
// Effectue un peu de clipping. // Effectue un peu de clipping.
if ( dst.x < m_clipRect.left ) if ( dst.x < m_clipRect.left )
@ -150,7 +130,8 @@ HRESULT CPixmap::BltFast(int chDst, int channel,
} }
if ( rcRect.left >= rcRect.right || if ( rcRect.left >= rcRect.right ||
rcRect.top >= rcRect.bottom ) return DD_OK; rcRect.top >= rcRect.bottom )
return 0;
if ( chDst < 0 ) if ( chDst < 0 )
{ {
@ -163,7 +144,7 @@ HRESULT CPixmap::BltFast(int chDst, int channel,
dstRect.x = dst.x; dstRect.x = dst.x;
dstRect.y = dst.y; dstRect.y = dst.y;
SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect); res = SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect);
} }
else else
{ {
@ -177,24 +158,19 @@ HRESULT CPixmap::BltFast(int chDst, int channel,
dstRect.y = dst.y; dstRect.y = dst.y;
SDL_SetRenderTarget (g_renderer, m_lpSDLTexture[chDst]); SDL_SetRenderTarget (g_renderer, m_lpSDLTexture[chDst]);
SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect); res = SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect);
SDL_SetRenderTarget (g_renderer, nullptr); SDL_SetRenderTarget (g_renderer, nullptr);
} }
return ddrval; return res;
} }
// Effectue un appel BltFast. // Effectue un appel BltFast.
// Les modes sont 0=transparent, 1=opaque. // Les modes sont 0=transparent, 1=opaque.
HRESULT CPixmap::BltFast(SDL_Texture *lpSDL, int CPixmap::BltFast(SDL_Texture *lpSDL, int channel, POINT dst, RECT rcRect)
int channel, POINT dst, RECT rcRect, int mode)
{ {
DWORD dwTrans; int res;
HRESULT ddrval = DD_OK;
if ( mode == 0 ) dwTrans = DDBLTFAST_SRCCOLORKEY;
else dwTrans = DDBLTFAST_NOCOLORKEY;
SDL_Rect srcRect, dstRect; SDL_Rect srcRect, dstRect;
srcRect.x = rcRect.left; srcRect.x = rcRect.left;
@ -206,10 +182,10 @@ HRESULT CPixmap::BltFast(SDL_Texture *lpSDL,
dstRect.y = dst.y; dstRect.y = dst.y;
SDL_SetRenderTarget (g_renderer, lpSDL); SDL_SetRenderTarget (g_renderer, lpSDL);
SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect); res = SDL_RenderCopy (g_renderer, m_lpSDLTexture[channel], &srcRect, &dstRect);
SDL_SetRenderTarget (g_renderer, nullptr); SDL_SetRenderTarget (g_renderer, nullptr);
return ddrval; return res;
} }
// Cache une image contenant des icônes. // Cache une image contenant des icônes.
@ -363,12 +339,10 @@ bool CPixmap::IsIconPixel(int channel, int rank, POINT pos)
// Dessine une partie d'image rectangulaire. // Dessine une partie d'image rectangulaire.
// Les modes sont 0=transparent, 1=opaque. // Les modes sont 0=transparent, 1=opaque.
bool CPixmap::DrawIcon(int chDst, int channel, int rank, POINT pos, bool CPixmap::DrawIcon(int chDst, int channel, int rank, POINT pos, bool bMask)
int mode, bool bMask)
{ {
int nbx, nby; int nbx, nby;
RECT rect; RECT rect;
HRESULT ddrval;
COLORREF oldColor1, oldColor2; COLORREF oldColor1, oldColor2;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
@ -390,10 +364,7 @@ bool CPixmap::DrawIcon(int chDst, int channel, int rank, POINT pos,
oldColor1 = m_colorSurface[2*channel+0]; oldColor1 = m_colorSurface[2*channel+0];
oldColor2 = m_colorSurface[2*channel+1]; oldColor2 = m_colorSurface[2*channel+1];
ddrval = BltFast(chDst, channel, pos, rect, mode); return !BltFast (chDst, channel, pos, rect);
if ( ddrval != DD_OK ) return false;
return true;
} }
// Dessine une partie d'image rectangulaire. // Dessine une partie d'image rectangulaire.
@ -406,12 +377,10 @@ bool CPixmap::DrawIcon(int chDst, int channel, int rank, POINT pos,
// 32,32 34,33 // 32,32 34,33
// 33,48 35,49 // 33,48 35,49
bool CPixmap::DrawIconDemi(int chDst, int channel, int rank, POINT pos, bool CPixmap::DrawIconDemi(int chDst, int channel, int rank, POINT pos, bool bMask)
int mode, bool bMask)
{ {
int nbx, nby; int nbx, nby;
RECT rect; RECT rect;
HRESULT ddrval;
COLORREF oldColor1, oldColor2; COLORREF oldColor1, oldColor2;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
@ -435,22 +404,16 @@ bool CPixmap::DrawIconDemi(int chDst, int channel, int rank, POINT pos,
oldColor1 = m_colorSurface[2*channel+0]; oldColor1 = m_colorSurface[2*channel+0];
oldColor2 = m_colorSurface[2*channel+1]; oldColor2 = m_colorSurface[2*channel+1];
ddrval = BltFast(chDst, channel, pos, rect, mode); return !BltFast (chDst, channel, pos, rect);
if ( ddrval != DD_OK ) return false;
return true;
} }
// Dessine une partie d'image rectangulaire. // Dessine une partie d'image rectangulaire.
// Les modes sont 0=transparent, 1=opaque.
bool CPixmap::DrawIconPart(int chDst, int channel, int rank, POINT pos, bool CPixmap::DrawIconPart(int chDst, int channel, int rank, POINT pos,
int startY, int endY, int startY, int endY, bool bMask)
int mode, bool bMask)
{ {
int nbx, nby; int nbx, nby;
RECT rect; RECT rect;
HRESULT ddrval;
COLORREF oldColor1, oldColor2; COLORREF oldColor1, oldColor2;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
@ -475,19 +438,13 @@ bool CPixmap::DrawIconPart(int chDst, int channel, int rank, POINT pos,
oldColor1 = m_colorSurface[2*channel+0]; oldColor1 = m_colorSurface[2*channel+0];
oldColor2 = m_colorSurface[2*channel+1]; oldColor2 = m_colorSurface[2*channel+1];
ddrval = BltFast(chDst, channel, pos, rect, mode); return !BltFast (chDst, channel, pos, rect);
if ( ddrval != DD_OK ) return false;
return true;
} }
// Dessine une partie d'image n'importe où. // Dessine une partie d'image n'importe où.
// Les modes sont 0=transparent, 1=opaque.
bool CPixmap::DrawPart(int chDst, int channel, POINT dest, RECT rect, bool CPixmap::DrawPart(int chDst, int channel, POINT dest, RECT rect, bool bMask)
int mode, bool bMask)
{ {
HRESULT ddrval;
COLORREF oldColor1, oldColor2; COLORREF oldColor1, oldColor2;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
@ -496,19 +453,15 @@ bool CPixmap::DrawPart(int chDst, int channel, POINT dest, RECT rect,
oldColor1 = m_colorSurface[2*channel+0]; oldColor1 = m_colorSurface[2*channel+0];
oldColor2 = m_colorSurface[2*channel+1]; oldColor2 = m_colorSurface[2*channel+1];
ddrval = BltFast(chDst, channel, dest, rect, mode); return !BltFast (chDst, channel, dest, rect);
if ( ddrval != DD_OK ) return false;
return true;
} }
// Dessine une partie d'image rectangulaire. // Dessine une partie d'image rectangulaire.
// Les modes sont 0=transparent, 1=opaque.
bool CPixmap::DrawImage(int chDst, int channel, RECT rect, int mode) bool CPixmap::DrawImage(int chDst, int channel, RECT rect)
{ {
POINT dst; POINT dst;
HRESULT ddrval; int res;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
if (m_lpSDLTexture[channel] == NULL ) return false; if (m_lpSDLTexture[channel] == NULL ) return false;
@ -516,9 +469,10 @@ bool CPixmap::DrawImage(int chDst, int channel, RECT rect, int mode)
dst.x = rect.left; dst.x = rect.left;
dst.y = rect.top; dst.y = rect.top;
ddrval = BltFast(chDst, channel, dst, rect, mode); res = BltFast(chDst, channel, dst, rect);
if ( ddrval != DD_OK ) return false; if (res)
return false;
if ( channel == CHBACK ) if ( channel == CHBACK )
{ {
@ -537,7 +491,7 @@ bool CPixmap::BuildIconMask(int channelMask, int rankMask,
int nbx, nby; int nbx, nby;
POINT posDst; POINT posDst;
RECT rect; RECT rect;
HRESULT ddrval; int res;
if ( channel < 0 || channel >= MAXIMAGE ) return false; if ( channel < 0 || channel >= MAXIMAGE ) return false;
if (m_lpSDLTexture[channel] == NULL ) return false; if (m_lpSDLTexture[channel] == NULL ) return false;
@ -557,8 +511,9 @@ bool CPixmap::BuildIconMask(int channelMask, int rankMask,
rect.bottom = rect.top + m_iconDim[channel].y; rect.bottom = rect.top + m_iconDim[channel].y;
posDst.x = (rankDst%nbx)*m_iconDim[channel].x; posDst.x = (rankDst%nbx)*m_iconDim[channel].x;
posDst.y = (rankDst/nbx)*m_iconDim[channel].y; posDst.y = (rankDst/nbx)*m_iconDim[channel].y;
ddrval = BltFast(m_lpSDLTexture[channel], channel, posDst, rect, 1); res = BltFast(m_lpSDLTexture[channel], channel, posDst, rect);
if ( ddrval != DD_OK ) return false; if (res)
return false;
if ( m_iconDim[channelMask].x == 0 || if ( m_iconDim[channelMask].x == 0 ||
m_iconDim[channelMask].y == 0 ) return false; m_iconDim[channelMask].y == 0 ) return false;
@ -572,10 +527,9 @@ bool CPixmap::BuildIconMask(int channelMask, int rankMask,
rect.top = (rankMask/nbx)*m_iconDim[channelMask].y; rect.top = (rankMask/nbx)*m_iconDim[channelMask].y;
rect.right = rect.left + m_iconDim[channelMask].x; rect.right = rect.left + m_iconDim[channelMask].x;
rect.bottom = rect.top + m_iconDim[channelMask].y; rect.bottom = rect.top + m_iconDim[channelMask].y;
ddrval = BltFast(m_lpSDLTexture[channel], channelMask, posDst, rect, 0); res = BltFast(m_lpSDLTexture[channel], channelMask, posDst, rect);
if ( ddrval != DD_OK ) return false;
return true; return !res;
} }

View File

@ -2,7 +2,6 @@
#pragma once #pragma once
#include <ddraw.h>
#include <SDL.h> #include <SDL.h>
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
@ -16,8 +15,6 @@ public:
CPixmap(); CPixmap();
~CPixmap(); ~CPixmap();
void SetDebug(bool bDebug);
bool Create(POINT dim, bool bFullScreen, int mouseType); bool Create(POINT dim, bool bFullScreen, int mouseType);
bool Flush(); bool Flush();
void Fill(RECT rect, COLORREF color); void Fill(RECT rect, COLORREF color);
@ -30,11 +27,11 @@ public:
bool IsIconPixel(int channel, int rank, POINT pos); bool IsIconPixel(int channel, int rank, POINT pos);
bool DrawIcon(int chDst, int channel, int rank, POINT pos, int mode=0, bool bMask=false); bool DrawIcon(int chDst, int channel, int rank, POINT pos, bool bMask=false);
bool DrawIconDemi(int chDst, int channel, int rank, POINT pos, int mode=0, bool bMask=false); bool DrawIconDemi(int chDst, int channel, int rank, POINT pos, bool bMask=false);
bool DrawIconPart(int chDst, int channel, int rank, POINT pos, int startY, int endY, int mode=0, bool bMask=false); bool DrawIconPart(int chDst, int channel, int rank, POINT pos, int startY, int endY, bool bMask=false);
bool DrawPart(int chDst, int channel, POINT dest, RECT rect, int mode=0, bool bMask=false); bool DrawPart(int chDst, int channel, POINT dest, RECT rect, bool bMask=false);
bool DrawImage(int chDst, int channel, RECT rect, int mode=0); bool DrawImage(int chDst, int channel, RECT rect);
bool BuildIconMask(int channelMask, int rankMask, bool BuildIconMask(int channelMask, int rankMask,
int channel, int rankSrc, int rankDst); int channel, int rankSrc, int rankDst);
@ -47,9 +44,8 @@ public:
void ChangeSprite (MouseSprites sprite); void ChangeSprite (MouseSprites sprite);
protected: protected:
HRESULT BltFast(int chDst, int channel, POINT dst, RECT rcRect, int mode); int BltFast(int chDst, int channel, POINT dst, RECT rcRect);
HRESULT BltFast(SDL_Texture *lpSDL, int BltFast(SDL_Texture *lpSDL, int channel, POINT dst, RECT rcRect);
int channel, POINT dst, RECT rcRect, int mode);
RECT MouseRectSprite(); RECT MouseRectSprite();
SDL_Point GetCursorHotSpot (int sprite); SDL_Point GetCursorHotSpot (int sprite);
@ -75,7 +71,6 @@ protected:
char m_filename[MAXIMAGE][20]; char m_filename[MAXIMAGE][20];
POINT m_totalDim[MAXIMAGE]; // dimensions totale image POINT m_totalDim[MAXIMAGE]; // dimensions totale image
POINT m_iconDim[MAXIMAGE]; // dimensions d'une icône POINT m_iconDim[MAXIMAGE]; // dimensions d'une icône
DDBLTFX m_DDbltfx;
}; };
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////