OpenClonk
C4Draw Class Referenceabstract

#include <C4Draw.h>

Inheritance diagram for C4Draw:
[legend]
Collaboration diagram for C4Draw:
[legend]

Public Types

enum  DrawOperation { OP_POINTS , OP_TRIANGLES }
 
enum  { DEFAULT_MESSAGE_COLOR = 0xffffffff }
 

Public Member Functions

 C4Draw ()=default
 
virtual ~C4Draw ()
 
bool Init (C4AbstractApp *pApp, unsigned int iXRes, unsigned int iYRes, unsigned int iMonitor)
 
virtual void Clear ()
 
virtual void Default ()
 
virtual CStdGLCtxCreateContext (C4Window *, C4AbstractApp *)
 
virtual bool OnResolutionChanged (unsigned int iXRes, unsigned int iYRes)=0
 
bool GetPrimaryClipper (int &rX1, int &rY1, int &rX2, int &rY2)
 
bool SetPrimaryClipper (int iX1, int iY1, int iX2, int iY2)
 
bool SubPrimaryClipper (int iX1, int iY1, int iX2, int iY2)
 
C4Rect GetClipRect () const
 
C4Rect GetOutRect () const
 
bool StorePrimaryClipper ()
 
bool RestorePrimaryClipper ()
 
bool NoPrimaryClipper ()
 
bool ApplyPrimaryClipper (C4Surface *sfcSurface)
 
bool DetachPrimaryClipper (C4Surface *sfcSurface)
 
virtual bool UpdateClipper ()=0
 
bool GetSurfaceSize (C4Surface *sfcSurface, int &iWdt, int &iHgt)
 
void Grayscale (C4Surface *sfcSfc, int32_t iOffset=0)
 
void LockingPrimary ()
 
void PrimaryUnlocked ()
 
virtual bool PrepareMaterial (StdMeshMatManager &mat_manager, StdMeshMaterialLoader &loader, StdMeshMaterial &mat)=0
 
virtual bool PrepareRendering (C4Surface *sfcToSurface)=0
 
virtual bool EnsureMainContextSelected ()=0
 
virtual bool PrepareSpriteShader (C4Shader &shader, const char *name, int ssc, C4GroupSet *pGroups, const char *const *additionalDefines, const char *const *additionalSlices)=0
 
virtual void BlitLandscape (C4Surface *sfcSource, float fx, float fy, C4Surface *sfcTarget, float tx, float ty, float wdt, float hgt)
 
void Blit8Fast (CSurface8 *sfcSource, int fx, int fy, C4Surface *sfcTarget, int tx, int ty, int wdt, int hgt)
 
bool Blit (C4Surface *sfcSource, float fx, float fy, float fwdt, float fhgt, C4Surface *sfcTarget, float tx, float ty, float twdt, float thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
 
bool BlitUnscaled (C4Surface *sfcSource, float fx, float fy, float fwdt, float fhgt, C4Surface *sfcTarget, float tx, float ty, float twdt, float thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
 
bool RenderMesh (StdMeshInstance &instance, C4Surface *sfcTarget, float tx, float ty, float twdt, float thgt, DWORD dwPlayerColor, C4BltTransform *pTransform)
 
virtual void PerformMesh (StdMeshInstance &instance, float tx, float ty, float twdt, float thgt, DWORD dwPlayerColor, C4BltTransform *pTransform)=0
 
bool Blit8 (C4Surface *sfcSource, int fx, int fy, int fwdt, int fhgt, C4Surface *sfcTarget, int tx, int ty, int twdt, int thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
 
bool BlitSimple (C4Surface *sfcSource, int fx, int fy, int fwdt, int fhgt, C4Surface *sfcTarget, int tx, int ty, int twdt, int thgt, bool fTransparency=true)
 
bool BlitSurface (C4Surface *sfcSurface, C4Surface *sfcTarget, int tx, int ty, bool fBlitBase)
 
bool BlitSurfaceTile (C4Surface *sfcSurface, C4Surface *sfcTarget, float iToX, float iToY, float iToWdt, float iToHgt, float iOffsetX, float iOffsetY, C4ShaderCall *shader_call)
 
virtual void FillBG (DWORD dwClr=0)=0
 
bool TextOut (const char *szText, CStdFont &rFont, float fZoom, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol=0xffffffff, BYTE byForm=ALeft, bool fDoMarkup=true)
 
bool StringOut (const char *szText, CStdFont &rFont, float fZoom, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol=0xffffffff, BYTE byForm=ALeft, bool fDoMarkup=true)
 
virtual void PerformMultiPix (C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, C4ShaderCall *shader_call)=0
 
virtual void PerformMultiLines (C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, float width, C4ShaderCall *shader_call)=0
 
virtual void PerformMultiTris (C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, const C4BltTransform *pTransform, C4TexRef *pTex, C4TexRef *pOverlay, C4TexRef *pNormal, DWORD dwOverlayClrMod, C4ShaderCall *shader_call)=0
 
void DrawBoxDw (C4Surface *sfcDest, int iX1, int iY1, int iX2, int iY2, DWORD dwClr)
 
void DrawBoxFade (C4Surface *sfcDest, float iX, float iY, float iWdt, float iHgt, DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, DWORD dwClr4, C4ShaderCall *shader_call)
 
void DrawPatternedCircle (C4Surface *sfcDest, int x, int y, int r, BYTE col, C4Pattern &Pattern, CStdPalette &rPal)
 
void DrawFrameDw (C4Surface *sfcDest, int x1, int y1, int x2, int y2, DWORD dwClr, float width=1.0f)
 
void DrawQuadDw (C4Surface *sfcTarget, float *ipVtx, DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, DWORD dwClr4, C4ShaderCall *shader_call)
 
void DrawPix (C4Surface *sfcDest, float tx, float ty, DWORD dwCol)
 
void DrawLineDw (C4Surface *sfcTarget, float x1, float y1, float x2, float y2, DWORD dwClr, float width=1.0f)
 
void DrawCircleDw (C4Surface *sfcTarget, float cx, float cy, float r, DWORD dwClr, float width=1.0f)
 
void SetGamma (float r, float g, float b, int32_t iRampIndex)
 
void ResetGamma ()
 
DWORD ApplyGammaTo (DWORD dwClr)
 
void ActivateBlitModulation (DWORD dwWithClr)
 
void DeactivateBlitModulation ()
 
bool GetBlitModulation (DWORD &rdwColor)
 
void SetBlitMode (DWORD dwBlitMode)
 
void ResetBlitMode ()
 
void SetFoW (const C4FoWRegion *fow)
 
const C4FoWRegionGetFoW () const
 
void SetZoom (float X, float Y, float Zoom)
 
void SetZoom (const ZoomData &zoom)
 
void GetZoom (ZoomData *r)
 
void ApplyZoom (float &X, float &Y)
 
void RemoveZoom (float &X, float &Y)
 
void SetMeshTransform (const StdMeshMatrix *Transform)
 
void SetPerspective (bool fSet)
 
virtual bool RestoreDeviceObjects ()=0
 
virtual bool InvalidateDeviceObjects ()=0
 
virtual bool DeviceReady ()=0
 

Public Attributes

C4AbstractApppApp
 
bool Active
 
float gamma [C4MaxGammaRamps][3]
 
float gammaOut [3]
 
int MaxTexSize {0}
 
C4ScriptUniform scriptUniform
 
float Zoom
 

Static Public Attributes

static constexpr int COLOR_DEPTH = 32
 
static constexpr int COLOR_DEPTH_BYTES = COLOR_DEPTH / 8
 

Protected Member Functions

bool StringOut (const char *szText, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol, BYTE byForm, bool fDoMarkup, C4Markup &Markup, CStdFont *pFont, float fZoom)
 
bool CreatePrimaryClipper (unsigned int iXRes, unsigned int iYRes)
 
virtual bool Error (const char *szMsg)
 

Protected Attributes

float fClipX1
 
float fClipY1
 
float fClipX2
 
float fClipY2
 
float fStClipX1
 
float fStClipY1
 
float fStClipX2
 
float fStClipY2
 
int32_t iClipX1
 
int32_t iClipY1
 
int32_t iClipX2
 
int32_t iClipY2
 
bool ClipAll
 
bool PrimaryLocked
 
C4SurfaceRenderTarget
 
bool BlitModulated
 
DWORD BlitModulateClr
 
DWORD dwBlitMode
 
const C4FoWRegionpFoW
 
float ZoomX
 
float ZoomY
 
const StdMeshMatrixMeshTransform
 
bool fUsePerspective
 

Friends

class C4Surface
 
class C4TexRef
 
class C4Pattern
 

Detailed Description

Definition at line 84 of file C4Draw.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
DEFAULT_MESSAGE_COLOR 

Definition at line 167 of file C4Draw.h.

167 { DEFAULT_MESSAGE_COLOR = 0xffffffff };
@ DEFAULT_MESSAGE_COLOR
Definition: C4Draw.h:167

◆ DrawOperation

Enumerator
OP_POINTS 
OP_TRIANGLES 

Definition at line 87 of file C4Draw.h.

@ OP_TRIANGLES
Definition: C4Draw.h:87
@ OP_POINTS
Definition: C4Draw.h:87

Constructor & Destructor Documentation

◆ C4Draw()

C4Draw::C4Draw ( )
default

◆ ~C4Draw()

virtual C4Draw::~C4Draw ( )
inlinevirtual

Definition at line 93 of file C4Draw.h.

93 { pDraw=nullptr; }
C4Draw * pDraw
Definition: C4Draw.cpp:42

References pDraw.

Member Function Documentation

◆ ActivateBlitModulation()

void C4Draw::ActivateBlitModulation ( DWORD  dwWithClr)
inline

Definition at line 188 of file C4Draw.h.

188 { BlitModulated=true; BlitModulateClr=dwWithClr; } // modulate following blits with a given color
bool BlitModulated
Definition: C4Draw.h:108
DWORD BlitModulateClr
Definition: C4Draw.h:109

References BlitModulateClr, and BlitModulated.

Referenced by C4Sky::Draw(), C4GUI::Dialog::Draw(), C4GraphicsOverlay::Draw(), C4Landscape::Draw(), C4MouseControl::Draw(), C4GUI::Tabular::Sheet::DrawCaption(), C4Viewport::DrawMenu(), C4GraphicsOverlay::DrawPicture(), CStdFont::DrawText(), and C4Object::PrepareDrawing().

Here is the caller graph for this function:

◆ ApplyGammaTo()

DWORD C4Draw::ApplyGammaTo ( DWORD  dwClr)

Definition at line 766 of file C4Draw.cpp.

767 {
768  return C4RGB(int(pow(float(GetRedValue(dwClr)) / 255.0f, gammaOut[0]) * 255.0),
769  int(pow(float(GetGreenValue(dwClr)) / 255.0f, gammaOut[1]) * 255.0),
770  int(pow(float(GetBlueValue(dwClr)) / 255.0f, gammaOut[2]) * 255.0));
771 }
#define C4RGB(r, g, b)
Definition: StdColors.h:26
#define GetRedValue(rgb)
Definition: StdColors.h:29
#define GetGreenValue(rgb)
Definition: StdColors.h:28
#define GetBlueValue(rgb)
Definition: StdColors.h:27
float gammaOut[3]
Definition: C4Draw.h:98

References C4RGB, gammaOut, GetBlueValue, GetGreenValue, and GetRedValue.

◆ ApplyPrimaryClipper()

bool C4Draw::ApplyPrimaryClipper ( C4Surface sfcSurface)

Definition at line 227 of file C4Draw.cpp.

228 {
229  return true;
230 }

◆ ApplyZoom()

void C4Draw::ApplyZoom ( float &  X,
float &  Y 
)

Definition at line 778 of file C4Draw.cpp.

779 {
780  X = (X - ZoomX) * Zoom + ZoomX;
781  Y = (Y - ZoomY) * Zoom + ZoomY;
782 }
#define X(sdl, oc)
float ZoomY
Definition: C4Draw.h:112
float ZoomX
Definition: C4Draw.h:112
float Zoom
Definition: C4Draw.h:116

References X, Zoom, ZoomX, and ZoomY.

Referenced by Blit8Fast(), BlitUnscaled(), C4GUI::Window::Draw(), C4LandscapeRenderGL::Draw(), and C4GUI::Edit::DrawElement().

Here is the caller graph for this function:

◆ Blit()

bool C4Draw::Blit ( C4Surface sfcSource,
float  fx,
float  fy,
float  fwdt,
float  fhgt,
C4Surface sfcTarget,
float  tx,
float  ty,
float  twdt,
float  thgt,
bool  fSrcColKey = false,
const C4BltTransform pTransform = nullptr 
)

Definition at line 301 of file C4Draw.cpp.

304 {
305  return BlitUnscaled(sfcSource, fx * sfcSource->Scale, fy * sfcSource->Scale, fwdt * sfcSource->Scale, fhgt * sfcSource->Scale,
306  sfcTarget, tx, ty, twdt, thgt, fSrcColKey, pTransform);
307 }
bool BlitUnscaled(C4Surface *sfcSource, float fx, float fy, float fwdt, float fhgt, C4Surface *sfcTarget, float tx, float ty, float twdt, float thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
Definition: C4Draw.cpp:309
int Scale
Definition: C4Surface.h:66

References BlitUnscaled(), and C4Surface::Scale.

Referenced by BlitLandscape(), BlitSimple(), BlitSurface(), C4FacetSurface::CopyFromSfcMaxSize(), C4Facet::Draw(), C4Object::Draw(), C4Object::DrawFaceImpl(), C4Facet::DrawFullScreen(), C4Facet::DrawT(), CStdFont::DrawText(), C4Object::DrawTopFace(), C4Facet::DrawX(), C4Facet::DrawXFloat(), C4Facet::DrawXR(), C4Facet::DrawXT(), C4MapFolderData::Load(), and C4Game::SaveGameTitle().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Blit8()

bool C4Draw::Blit8 ( C4Surface sfcSource,
int  fx,
int  fy,
int  fwdt,
int  fhgt,
C4Surface sfcTarget,
int  tx,
int  ty,
int  twdt,
int  thgt,
bool  fSrcColKey = false,
const C4BltTransform pTransform = nullptr 
)

Definition at line 418 of file C4Draw.cpp.

421 {
422  if (!pTransform) return BlitSimple(sfcSource, fx, fy, fwdt, fhgt, sfcTarget, tx, ty, twdt, thgt, fSrcColKey!=false);
423  // safety
424  if (!fwdt || !fhgt) return true;
425  // Lock the surfaces
426  if (!sfcSource->Lock())
427  return false;
428  if (!sfcTarget->Lock())
429  { sfcSource->Unlock(); return false; }
430  // transformed, emulated blit
431  // Calculate transform target rect
432  C4BltTransform Transform;
433  Transform.SetMoveScale(tx-(float)fx*twdt/fwdt, ty-(float)fy*thgt/fhgt, (float) twdt/fwdt, (float) thgt/fhgt);
434  Transform *=* pTransform;
435  C4BltTransform TransformBack;
436  TransformBack.SetAsInv(Transform);
437  auto ttx0=(float)tx, tty0=(float)ty, ttx1=(float)(tx+twdt), tty1=(float)(ty+thgt);
438  auto ttx2=(float)ttx0, tty2=(float)tty1, ttx3=(float)ttx1, tty3=(float)tty0;
439  pTransform->TransformPoint(ttx0, tty0);
440  pTransform->TransformPoint(ttx1, tty1);
441  pTransform->TransformPoint(ttx2, tty2);
442  pTransform->TransformPoint(ttx3, tty3);
443  int ttxMin = std::max<int>((int)floor(std::min(std::min(ttx0, ttx1), std::min(ttx2, ttx3))), 0);
444  int ttxMax = std::min<int>((int)ceil(std::max(std::max(ttx0, ttx1), std::max(ttx2, ttx3))), sfcTarget->Wdt);
445  int ttyMin = std::max<int>((int)floor(std::min(std::min(tty0, tty1), std::min(tty2, tty3))), 0);
446  int ttyMax = std::min<int>((int)ceil(std::max(std::max(tty0, tty1), std::max(tty2, tty3))), sfcTarget->Hgt);
447  // blit within target rect
448  for (int y = ttyMin; y < ttyMax; ++y)
449  for (int x = ttxMin; x < ttxMax; ++x)
450  {
451  float ffx=(float)x, ffy=(float)y;
452  TransformBack.TransformPoint(ffx, ffy);
453  int ifx=static_cast<int>(ffx), ify=static_cast<int>(ffy);
454  if (ifx<fx || ify<fy || ifx>=fx+fwdt || ify>=fy+fhgt) continue;
455  sfcTarget->BltPix(x,y, sfcSource, ifx,ify, !!fSrcColKey);
456  }
457  // Unlock the surfaces
458  sfcSource->Unlock();
459  sfcTarget->Unlock();
460  return true;
461 }
void SetMoveScale(float dx, float dy, float sx, float sy)
bool SetAsInv(C4BltTransform &rOfTransform)
void TransformPoint(float &rX, float &rY) const
bool BlitSimple(C4Surface *sfcSource, int fx, int fy, int fwdt, int fhgt, C4Surface *sfcTarget, int tx, int ty, int twdt, int thgt, bool fTransparency=true)
Definition: C4Draw.cpp:463
int Wdt
Definition: C4Surface.h:65
bool Unlock()
Definition: C4Surface.cpp:464
bool Lock()
Definition: C4Surface.cpp:453
bool BltPix(int iX, int iY, C4Surface *sfcSource, int iSrcX, int iSrcY, bool fTransparency)
Definition: C4Surface.cpp:591
int Hgt
Definition: C4Surface.h:65

References BlitSimple(), C4Surface::BltPix(), C4Surface::Hgt, C4Surface::Lock(), C4BltTransform::SetAsInv(), C4BltTransform::SetMoveScale(), C4BltTransform::TransformPoint(), C4Surface::Unlock(), and C4Surface::Wdt.

Referenced by BlitUnscaled().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Blit8Fast()

void C4Draw::Blit8Fast ( CSurface8 sfcSource,
int  fx,
int  fy,
C4Surface sfcTarget,
int  tx,
int  ty,
int  wdt,
int  hgt 
)

Definition at line 251 of file C4Draw.cpp.

253 {
254  // blit 8bit-sfc
255  // lock surfaces
256  assert(sfcTarget->fPrimary);
257  bool fRender = sfcTarget->IsRenderTarget();
258  if (!fRender) if (!sfcTarget->Lock())
259  { return; }
260 
261  float tfx = tx, tfy = ty, twdt = wdt, thgt = hgt;
262  if (Zoom != 1.0)
263  {
264  ApplyZoom(tfx, tfy);
265  twdt *= Zoom;
266  thgt *= Zoom;
267  }
268 
269  // blit 8 bit pix in batches of 1024 pixels
270  static const int BUF_SIZE = 1024;
271  C4BltVertex* vertices = new C4BltVertex[BUF_SIZE];
272  int bufcnt = 0;
273 
274  for (int ycnt=0; ycnt<thgt; ++ycnt)
275  {
276  for (int xcnt=0; xcnt<twdt; ++xcnt)
277  {
278  BYTE byPix = sfcSource->GetPix(fx+wdt*xcnt/twdt, fy+hgt*ycnt/thgt);
279  DWORD dwClr = byPix ? sfcSource->pPal->GetClr(byPix) : 0x00000000;
280 
281  vertices[bufcnt].ftx = (float)(tx + xcnt / Zoom);
282  vertices[bufcnt].fty = (float)(ty + ycnt / Zoom);
283  DwTo4UB(dwClr, vertices[bufcnt].color);
284  ++bufcnt;
285 
286  if(bufcnt == BUF_SIZE)
287  {
288  PerformMultiPix(sfcTarget, vertices, BUF_SIZE, nullptr);
289  bufcnt = 0;
290  }
291  }
292 
293  }
294  if(bufcnt > 0)
295  PerformMultiPix(sfcTarget, vertices, bufcnt, nullptr);
296  delete[] vertices;
297  // unlock
298  if (!fRender) sfcTarget->Unlock();
299 }
float ftx
Definition: C4Draw.h:64
void DwTo4UB(DWORD dwClr, unsigned char(&r)[4])
Definition: C4Draw.h:29
float fty
Definition: C4Draw.h:64
uint8_t BYTE
uint32_t DWORD
void ApplyZoom(float &X, float &Y)
Definition: C4Draw.cpp:778
virtual void PerformMultiPix(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, C4ShaderCall *shader_call)=0
bool fPrimary
Definition: C4Surface.h:89
bool IsRenderTarget()
Definition: C4Surface.cpp:144
CStdPalette * pPal
Definition: CSurface8.h:31
BYTE GetPix(int iX, int iY) const
Definition: CSurface8.h:49
DWORD GetClr(BYTE byCol)
Definition: StdColors.h:188

References ApplyZoom(), DwTo4UB(), C4Surface::fPrimary, C4BltVertex::ftx, C4BltVertex::fty, CStdPalette::GetClr(), CSurface8::GetPix(), C4Surface::IsRenderTarget(), C4Surface::Lock(), PerformMultiPix(), CSurface8::pPal, C4Surface::Unlock(), and Zoom.

Referenced by C4Landscape::Draw().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlitLandscape()

void C4Draw::BlitLandscape ( C4Surface sfcSource,
float  fx,
float  fy,
C4Surface sfcTarget,
float  tx,
float  ty,
float  wdt,
float  hgt 
)
virtual

Definition at line 245 of file C4Draw.cpp.

247 {
248  Blit(sfcSource, fx, fy, wdt, hgt, sfcTarget, tx, ty, wdt, hgt, false);
249 }
bool Blit(C4Surface *sfcSource, float fx, float fy, float fwdt, float fhgt, C4Surface *sfcTarget, float tx, float ty, float twdt, float thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
Definition: C4Draw.cpp:301

References Blit().

Here is the call graph for this function:

◆ BlitSimple()

bool C4Draw::BlitSimple ( C4Surface sfcSource,
int  fx,
int  fy,
int  fwdt,
int  fhgt,
C4Surface sfcTarget,
int  tx,
int  ty,
int  twdt,
int  thgt,
bool  fTransparency = true 
)

Definition at line 463 of file C4Draw.cpp.

466 {
467  // rendertarget?
468  if (sfcTarget->IsRenderTarget())
469  {
470  return Blit(sfcSource, float(fx), float(fy), float(fwdt), float(fhgt), sfcTarget, float(tx), float(ty), float(twdt), float(thgt), true);
471  }
472  // Object is first stretched to dest rect
473  int xcnt,ycnt,tcx,tcy,cpcx,cpcy;
474  if (!fwdt || !fhgt || !twdt || !thgt) return false;
475  // Lock the surfaces
476  if (!sfcSource->Lock())
477  return false;
478  if (!sfcTarget->Lock())
479  { sfcSource->Unlock(); return false; }
480  // Rectangle centers
481  tcx=twdt/2; tcy=thgt/2;
482  for (ycnt=0; ycnt<thgt; ycnt++)
483  if (Inside(cpcy=ty+tcy-thgt/2+ycnt,0,sfcTarget->Hgt-1))
484  for (xcnt=0; xcnt<twdt; xcnt++)
485  if (Inside(cpcx=tx+tcx-twdt/2+xcnt,0,sfcTarget->Wdt-1))
486  sfcTarget->BltPix(cpcx, cpcy, sfcSource, xcnt*fwdt/twdt+fx, ycnt*fhgt/thgt+fy, fTransparency);
487  // Unlock the surfaces
488  sfcSource->Unlock();
489  sfcTarget->Unlock();
490  return true;
491 }
bool Inside(T ival, U lbound, V rbound)
Definition: Standard.h:43

References Blit(), C4Surface::BltPix(), C4Surface::Hgt, Inside(), C4Surface::IsRenderTarget(), C4Surface::Lock(), C4Surface::Unlock(), and C4Surface::Wdt.

Referenced by Blit8().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlitSurface()

bool C4Draw::BlitSurface ( C4Surface sfcSurface,
C4Surface sfcTarget,
int  tx,
int  ty,
bool  fBlitBase 
)

Definition at line 511 of file C4Draw.cpp.

512 {
513  if (fBlitBase)
514  {
515  Blit(sfcSurface, 0.0f, 0.0f, (float)sfcSurface->Wdt, (float)sfcSurface->Hgt, sfcTarget, float(tx), float(ty), float(sfcSurface->Wdt), float(sfcSurface->Hgt), false);
516  return true;
517  }
518  else
519  {
520  if (!sfcSurface) return false;
521  C4Surface *pSfcBase = sfcSurface->pMainSfc;
522  sfcSurface->pMainSfc = nullptr;
523  Blit(sfcSurface, 0.0f, 0.0f, (float)sfcSurface->Wdt, (float)sfcSurface->Hgt, sfcTarget, float(tx), float(ty), float(sfcSurface->Wdt), float(sfcSurface->Hgt), false);
524  sfcSurface->pMainSfc = pSfcBase;
525  return true;
526  }
527 }
C4Surface * pMainSfc
Definition: C4Surface.h:79

References Blit(), C4Surface::Hgt, C4Surface::pMainSfc, and C4Surface::Wdt.

Referenced by C4Surface::Copy().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlitSurfaceTile()

bool C4Draw::BlitSurfaceTile ( C4Surface sfcSurface,
C4Surface sfcTarget,
float  iToX,
float  iToY,
float  iToWdt,
float  iToHgt,
float  iOffsetX,
float  iOffsetY,
C4ShaderCall shader_call 
)

Definition at line 529 of file C4Draw.cpp.

530 {
531  // Only direct rendering from single, tileable, texture
532  if (!sfcTarget->IsRenderTarget()) return false;
533  if ((sfcSurface->texture->iFlags & C4SF_Tileable) == 0) return false;
534 
535  // source surface dimensions
536  const float sourceWdt = sfcSurface->Wdt;
537  const float sourceHgt = sfcSurface->Hgt;
538 
539  // vertex positions
540  C4BltVertex vertices[6];
541  vertices[0].ftx = iToX; vertices[0].fty = iToY; vertices[0].ftz = 0.0f;
542  vertices[0].tx = (0.0f + iOffsetX) / sourceWdt; vertices[0].ty = (0.0f + iOffsetY) / sourceHgt;
543  DwTo4UB(0xffffffff, vertices[0].color);
544  vertices[1].ftx = iToX + iToWdt; vertices[1].fty = iToY; vertices[1].ftz = 0.0f;
545  vertices[1].tx = (iToWdt + iOffsetX) / sourceWdt; vertices[1].ty = (0.0f + iOffsetY) / sourceHgt;
546  DwTo4UB(0xffffffff, vertices[1].color);
547  vertices[2].ftx = iToX + iToWdt; vertices[2].fty = iToY + iToHgt; vertices[2].ftz = 0.0f;
548  vertices[2].tx = (iToWdt + iOffsetX) / sourceWdt; vertices[2].ty = (iToHgt + iOffsetY) / sourceHgt;
549  DwTo4UB(0xffffffff, vertices[2].color);
550  vertices[3].ftx = iToX; vertices[3].fty = iToY + iToHgt; vertices[3].ftz = 0.0f;
551  vertices[3].tx = (0.0f + iOffsetX) / sourceWdt; vertices[3].ty = (iToHgt + iOffsetY) / sourceHgt;
552  DwTo4UB(0xffffffff, vertices[3].color);
553  // duplicate vertices
554  vertices[4] = vertices[0]; vertices[5] = vertices[2];
555 
556  // Draw
557  PerformMultiTris(sfcTarget, vertices, 6, nullptr, sfcSurface->texture.get(), nullptr, nullptr, 0, shader_call);
558  return true;
559 }
float tx
Definition: C4Draw.h:62
float ty
Definition: C4Draw.h:62
float ftz
Definition: C4Draw.h:64
const int C4SF_Tileable
Definition: C4Surface.h:49
virtual void PerformMultiTris(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, const C4BltTransform *pTransform, C4TexRef *pTex, C4TexRef *pOverlay, C4TexRef *pNormal, DWORD dwOverlayClrMod, C4ShaderCall *shader_call)=0
std::unique_ptr< C4TexRef > texture
Definition: C4Surface.h:78

References C4SF_Tileable, DwTo4UB(), C4BltVertex::ftx, C4BltVertex::fty, C4BltVertex::ftz, C4Surface::Hgt, C4Surface::IsRenderTarget(), PerformMultiTris(), C4Surface::texture, C4BltVertex::tx, C4BltVertex::ty, and C4Surface::Wdt.

Referenced by C4UpperBoard::Draw(), C4Sky::Draw(), C4Viewport::Draw(), C4GUI::FullscreenDialog::DrawElement(), and C4ViewportList::DrawFullscreenBackground().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ BlitUnscaled()

bool C4Draw::BlitUnscaled ( C4Surface sfcSource,
float  fx,
float  fy,
float  fwdt,
float  fhgt,
C4Surface sfcTarget,
float  tx,
float  ty,
float  twdt,
float  thgt,
bool  fSrcColKey = false,
const C4BltTransform pTransform = nullptr 
)

Definition at line 309 of file C4Draw.cpp.

312 {
313  // safety
314  if (!sfcSource || !sfcTarget || !twdt || !thgt || !fwdt || !fhgt) return false;
315  // emulated blit?
316  if (!sfcTarget->IsRenderTarget())
317  {
318  C4BltTransform t;
319  if(pTransform && Zoom != 1.0)
320  {
321  t.Set(pTransform->mat[0]*Zoom, pTransform->mat[1]*Zoom, pTransform->mat[2]*Zoom + ZoomX*(1-Zoom),
322  pTransform->mat[3]*Zoom, pTransform->mat[4]*Zoom, pTransform->mat[5]*Zoom + ZoomY*(1-Zoom),
323  pTransform->mat[6], pTransform->mat[7], pTransform->mat[8]);
324  pTransform = &t;
325  }
326  else if(Zoom != 1.0)
327  {
328  ApplyZoom(tx, ty);
329  twdt *= Zoom;
330  thgt *= Zoom;
331  }
332 
333  return Blit8(sfcSource, int(fx), int(fy), int(fwdt), int(fhgt), sfcTarget, int(tx), int(ty), int(twdt), int(thgt), fSrcColKey, pTransform);
334  }
335 
336  // bound
337  if (ClipAll) return true;
338  // inside screen?
339  if (twdt<=0 || thgt<=0) return false;
340  // prepare rendering to surface
341  if (!PrepareRendering(sfcTarget)) return false;
342  // texture present?
343  if (!sfcSource->texture)
344  {
345  // primary surface?
346  if (sfcSource->fPrimary)
347  {
348  // blit emulated
349  return Blit8(sfcSource, int(fx), int(fy), int(fwdt), int(fhgt), sfcTarget, int(tx), int(ty), int(twdt), int(thgt), fSrcColKey);
350  }
351  return false;
352  }
353  // blit with basesfc?
354  bool fBaseSfc=false;
355  if (sfcSource->pMainSfc) if (sfcSource->pMainSfc->texture) fBaseSfc = true;
356 
357  C4TexRef *pTex = sfcSource->texture.get();
358  // set up blit data
359  C4BltVertex vertices[6];
360  vertices[0].ftx = tx; vertices[0].fty = ty;
361  vertices[1].ftx = tx + twdt; vertices[1].fty = ty;
362  vertices[2].ftx = tx + twdt; vertices[2].fty = ty + thgt;
363  vertices[3].ftx = tx; vertices[3].fty = ty + thgt;
364  vertices[0].tx = fx / pTex->iSizeX; vertices[0].ty = fy / pTex->iSizeY;
365  vertices[1].tx = (fx + fwdt) / pTex->iSizeX; vertices[1].ty = fy / pTex->iSizeY;
366  vertices[2].tx = (fx + fwdt) / pTex->iSizeX; vertices[2].ty = (fy + fhgt) / pTex->iSizeY;
367  vertices[3].tx = fx / pTex->iSizeX; vertices[3].ty = (fy + fhgt) / pTex->iSizeY;
368  DwTo4UB(0xffffffff, vertices[0].color);
369  DwTo4UB(0xffffffff, vertices[1].color);
370  DwTo4UB(0xffffffff, vertices[2].color);
371  DwTo4UB(0xffffffff, vertices[3].color);
372 
373  // duplicate vertices
374  vertices[4] = vertices[0]; vertices[5] = vertices[2];
375 
376  C4TexRef * pBaseTex = pTex;
377  // is there a base-surface to be blitted first?
378  if (fBaseSfc)
379  {
380  // then get this surface as same offset as from other surface
381  // assuming this is only valid as long as there's no texture management,
382  // organizing partially used textures together!
383  pBaseTex = sfcSource->pMainSfc->texture.get();
384  }
385 
386  C4TexRef* pNormalTex = nullptr;
387  if (sfcSource->pNormalSfc)
388  pNormalTex = sfcSource->pNormalSfc->texture.get();
389 
390  // ClrByOwner is always fully opaque
391  const DWORD dwOverlayClrMod = 0xff000000 | sfcSource->ClrByOwnerClr;
392  PerformMultiTris(sfcTarget, vertices, 6, pTransform, pBaseTex, fBaseSfc ? pTex : nullptr, pNormalTex, dwOverlayClrMod, nullptr);
393  // success
394  return true;
395 }
void Set(float fA, float fB, float fC, float fD, float fE, float fF, float fG, float fH, float fI)
bool ClipAll
Definition: C4Draw.h:105
bool Blit8(C4Surface *sfcSource, int fx, int fy, int fwdt, int fhgt, C4Surface *sfcTarget, int tx, int ty, int twdt, int thgt, bool fSrcColKey=false, const C4BltTransform *pTransform=nullptr)
Definition: C4Draw.cpp:418
virtual bool PrepareRendering(C4Surface *sfcToSurface)=0
C4Surface * pNormalSfc
Definition: C4Surface.h:80
DWORD ClrByOwnerClr
Definition: C4Surface.h:81
int iSizeX
Definition: C4Surface.h:157
int iSizeY
Definition: C4Surface.h:158

References ApplyZoom(), Blit8(), ClipAll, C4Surface::ClrByOwnerClr, DwTo4UB(), C4Surface::fPrimary, C4BltVertex::ftx, C4BltVertex::fty, C4TexRef::iSizeX, C4TexRef::iSizeY, C4Surface::IsRenderTarget(), C4BltTransform::mat, PerformMultiTris(), C4Surface::pMainSfc, C4Surface::pNormalSfc, PrepareRendering(), C4BltTransform::Set(), C4Surface::texture, C4BltVertex::tx, C4BltVertex::ty, Zoom, ZoomX, and ZoomY.

Referenced by Blit(), and C4Facet::DrawTUnscaled().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Clear()

void C4Draw::Clear ( )
virtual

Reimplemented in CStdGL.

Definition at line 184 of file C4Draw.cpp.

185 {
186  ResetGamma();
187  Active=BlitModulated=false;
188  dwBlitMode = 0;
189 }
DWORD dwBlitMode
Definition: C4Draw.h:110
bool Active
Definition: C4Draw.h:96
void ResetGamma()
Definition: C4Draw.cpp:754

References Active, BlitModulated, dwBlitMode, and ResetGamma().

Referenced by CStdGL::Clear().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CreateContext()

virtual CStdGLCtx* C4Draw::CreateContext ( C4Window ,
C4AbstractApp  
)
inlinevirtual

Reimplemented in CStdGL.

Definition at line 121 of file C4Draw.h.

121 { return nullptr; }

◆ CreatePrimaryClipper()

bool C4Draw::CreatePrimaryClipper ( unsigned int  iXRes,
unsigned int  iYRes 
)
protected

Definition at line 501 of file C4Draw.cpp.

502 {
503  // simply setup primary viewport
504  // assume no zoom has been set yet
505  assert(Zoom==1.0f);
506  SetPrimaryClipper(0, 0, iXRes - 1, iYRes - 1);
508  return true;
509 }
bool StorePrimaryClipper()
Definition: C4Draw.cpp:203
bool SetPrimaryClipper(int iX1, int iY1, int iX2, int iY2)
Definition: C4Draw.cpp:217

References SetPrimaryClipper(), StorePrimaryClipper(), and Zoom.

Referenced by Init(), and CStdGL::OnResolutionChanged().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DeactivateBlitModulation()

void C4Draw::DeactivateBlitModulation ( )
inline

Definition at line 189 of file C4Draw.h.

189 { BlitModulated=false; } // stop color modulation of blits

References BlitModulated.

Referenced by C4Sky::Draw(), C4GUI::Dialog::Draw(), C4GraphicsOverlay::Draw(), C4Landscape::Draw(), C4MouseControl::Draw(), C4ParticleList::Draw(), C4GUI::Tabular::Sheet::DrawCaption(), C4Viewport::DrawMenu(), C4GraphicsOverlay::DrawPicture(), CStdFont::DrawText(), and C4Object::FinishedDrawing().

Here is the caller graph for this function:

◆ Default()

void C4Draw::Default ( )
virtual

Reimplemented in CStdGL.

Definition at line 169 of file C4Draw.cpp.

170 {
171  RenderTarget=nullptr;
172  ClipAll=false;
173  Active=false;
174  BlitModulated=false;
175  dwBlitMode = 0;
176  ResetGamma();
177  pFoW = nullptr;
178  ZoomX = 0; ZoomY = 0; Zoom = 1;
179  MeshTransform = nullptr;
180  fUsePerspective = false;
182 }
bool fUsePerspective
Definition: C4Draw.h:114
C4Surface * RenderTarget
Definition: C4Draw.h:107
const StdMeshMatrix * MeshTransform
Definition: C4Draw.h:113
const C4FoWRegion * pFoW
Definition: C4Draw.h:111
C4ScriptUniform scriptUniform
Definition: C4Draw.h:100

References Active, BlitModulated, C4ScriptUniform::Clear(), ClipAll, dwBlitMode, fUsePerspective, MeshTransform, pFoW, RenderTarget, ResetGamma(), scriptUniform, Zoom, ZoomX, and ZoomY.

Referenced by CStdNoGfx::CStdNoGfx(), and CStdGL::Default().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DetachPrimaryClipper()

bool C4Draw::DetachPrimaryClipper ( C4Surface sfcSurface)

Definition at line 232 of file C4Draw.cpp.

233 {
234  return true;
235 }

◆ DeviceReady()

virtual bool C4Draw::DeviceReady ( )
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by C4TexRef::C4TexRef(), and C4Surface::Create().

Here is the caller graph for this function:

◆ DrawBoxDw()

void C4Draw::DrawBoxDw ( C4Surface sfcDest,
int  iX1,
int  iY1,
int  iX2,
int  iY2,
DWORD  dwClr 
)

Definition at line 840 of file C4Draw.cpp.

841 {
842  if (!sfcDest->IsRenderTarget())
843  {
844  // Box on non-render target: Emulate by setting pixels
845  if (!sfcDest->Lock()) return;
846  for (int y = iY1; y <= iY2; ++y)
847  for (int x = iX1; x <= iX2; ++x)
848  sfcDest->SetPixDw(x,y, dwClr);
849  sfcDest->Unlock();
850  }
851  else
852  {
853  DrawBoxFade(sfcDest, float(iX1), float(iY1), float(iX2 - iX1 + 1), float(iY2 - iY1 + 1), dwClr, dwClr, dwClr, dwClr, nullptr);
854  }
855 }
void DrawBoxFade(C4Surface *sfcDest, float iX, float iY, float iWdt, float iHgt, DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, DWORD dwClr4, C4ShaderCall *shader_call)
Definition: C4Draw.cpp:824
bool SetPixDw(int iX, int iY, DWORD dwCol)
Definition: C4Surface.cpp:576

References DrawBoxFade(), C4Surface::IsRenderTarget(), C4Surface::Lock(), C4Surface::SetPixDw(), and C4Surface::Unlock().

Referenced by C4MessageBoard::Draw(), C4Def::Draw(), C4LoaderScreen::Draw(), C4Sky::Draw(), C4GUI::Dialog::Draw(), C4Viewport::Draw(), C4GUI::Screen::Draw(), C4GUI::FrameDecoration::Draw(), C4ScriptGuiWindow::Draw(), C4GUI::GroupBox::DrawElement(), C4GUI::Edit::DrawElement(), C4GUI::ListBox::DrawElement(), C4GUI::Tabular::DrawElement(), C4GUI::TextWindow::DrawElement(), C4GUI::ContextMenu::DrawElement(), C4GUI::ComboBox::DrawElement(), C4GUI::Dialog::DrawElement(), C4MenuItem::DrawElement(), C4StartupNetListEntry::DrawElement(), and C4GUI::Screen::DrawToolTip().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawBoxFade()

void C4Draw::DrawBoxFade ( C4Surface sfcDest,
float  iX,
float  iY,
float  iWdt,
float  iHgt,
DWORD  dwClr1,
DWORD  dwClr2,
DWORD  dwClr3,
DWORD  dwClr4,
C4ShaderCall shader_call 
)

Definition at line 824 of file C4Draw.cpp.

825 {
826  // set vertex buffer data
827  // vertex order:
828  // 0=upper left dwClr1
829  // 1=lower left dwClr3
830  // 2=lower right dwClr4
831  // 3=upper right dwClr2
832  float vtx[8];
833  vtx[0] = iX ; vtx[1] = iY;
834  vtx[2] = iX ; vtx[3] = iY+iHgt;
835  vtx[4] = iX+iWdt; vtx[5] = iY+iHgt;
836  vtx[6] = iX+iWdt; vtx[7] = iY;
837  DrawQuadDw(sfcDest, vtx, dwClr1, dwClr3, dwClr4, dwClr2, shader_call);
838 }
void DrawQuadDw(C4Surface *sfcTarget, float *ipVtx, DWORD dwClr1, DWORD dwClr2, DWORD dwClr3, DWORD dwClr4, C4ShaderCall *shader_call)
Definition: C4Draw.cpp:653

References DrawQuadDw().

Referenced by C4Sky::Draw(), and DrawBoxDw().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawCircleDw()

void C4Draw::DrawCircleDw ( C4Surface sfcTarget,
float  cx,
float  cy,
float  r,
DWORD  dwClr,
float  width = 1.0f 
)

Definition at line 618 of file C4Draw.cpp.

619 {
620  // Draw as line segments
621  int32_t num_lines = 12 + int32_t(r / 10);
622  std::unique_ptr<C4BltVertex[]> vertices(new C4BltVertex[num_lines * 2]);
623  for (int32_t i = 0; i < num_lines; ++i)
624  {
625  float ang = float(i) * 2 * M_PI / num_lines;
626  int32_t iv = i * 2 + 1;
627  vertices[iv].ftx = cx + sin(ang) * r;
628  vertices[iv].fty = cy + cos(ang) * r;
629  DwTo4UB(dwClr, vertices[iv].color);
630  vertices[(iv + 1) % (num_lines * 2)] = vertices[iv];
631  }
632  PerformMultiLines(sfcTarget, vertices.get(), num_lines * 2, width, nullptr);
633 }
virtual void PerformMultiLines(C4Surface *sfcTarget, const C4BltVertex *vertices, unsigned int n_vertices, float width, C4ShaderCall *shader_call)=0

References DwTo4UB(), and PerformMultiLines().

Referenced by C4EditCursor::Draw().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawFrameDw()

void C4Draw::DrawFrameDw ( C4Surface sfcDest,
int  x1,
int  y1,
int  x2,
int  y2,
DWORD  dwClr,
float  width = 1.0f 
)

Definition at line 635 of file C4Draw.cpp.

636 {
637  C4BltVertex vertices[8];
638  vertices[0].ftx = x1; vertices[0].fty = y1;
639  vertices[1].ftx = x2; vertices[1].fty = y1;
640  vertices[2] = vertices[1];
641  vertices[3].ftx = x2; vertices[3].fty = y2;
642  vertices[4] = vertices[3];
643  vertices[5].ftx = x1; vertices[5].fty = y2;
644  vertices[6] = vertices[5];
645  vertices[7] = vertices[0];
646 
647  for(auto & vertex : vertices)
648  DwTo4UB(dwClr, vertex.color);
649 
650  PerformMultiLines(sfcDest, vertices, 8, width, nullptr);
651 }

References DwTo4UB(), C4BltVertex::ftx, C4BltVertex::fty, and PerformMultiLines().

Referenced by C4EditCursor::Draw(), C4PathFinderRay::Draw(), C4TransferZone::Draw(), C4Object::Draw(), C4ScriptGuiWindow::Draw(), C4GUI::GroupBox::DrawElement(), C4GUI::Edit::DrawElement(), C4GUI::ComboBox::DrawElement(), C4Menu::DrawFrame(), and C4GUI::Screen::DrawToolTip().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawLineDw()

void C4Draw::DrawLineDw ( C4Surface sfcTarget,
float  x1,
float  y1,
float  x2,
float  y2,
DWORD  dwClr,
float  width = 1.0f 
)

Definition at line 608 of file C4Draw.cpp.

609 {
610  C4BltVertex vertices[2];
611  vertices[0].ftx = x1; vertices[0].fty = y1;
612  vertices[1].ftx = x2; vertices[1].fty = y2;
613  DwTo4UB(dwClr, vertices[0].color);
614  DwTo4UB(dwClr, vertices[1].color);
615  PerformMultiLines(sfcTarget, vertices, 2, width, nullptr);
616 }

References DwTo4UB(), C4BltVertex::ftx, C4BltVertex::fty, and PerformMultiLines().

Referenced by C4EditCursor::Draw(), C4PathFinderRay::Draw(), C4Object::Draw(), C4GUI::Element::Draw3DFrame(), C4GUI::HorizontalLine::DrawElement(), C4GUI::GroupBox::DrawElement(), C4GUI::ListBox::DrawElement(), C4GUI::Tabular::DrawElement(), and C4Chart::DrawElement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawPatternedCircle()

void C4Draw::DrawPatternedCircle ( C4Surface sfcDest,
int  x,
int  y,
int  r,
BYTE  col,
C4Pattern Pattern,
CStdPalette rPal 
)

Definition at line 669 of file C4Draw.cpp.

670 {
671  bool fRenderTarget = sfcDest->IsRenderTarget();
672  if (!fRenderTarget) if (!sfcDest->Lock()) return;
673  for (int ycnt = -r; ycnt < r; ycnt++)
674  {
675  int lwdt = (int)sqrt(float(r * r - ycnt * ycnt));
676  // Set line
677  if (fRenderTarget)
678  {
679  for (int xcnt = x - lwdt; xcnt < x + lwdt; ++xcnt)
680  {
681  DrawPix(sfcDest, xcnt, y + ycnt, Pattern.PatternClr(xcnt, y + ycnt));
682  }
683  }
684  else
685  {
686  for (int xcnt = x - lwdt; xcnt < x + lwdt; ++xcnt)
687  {
688  sfcDest->SetPixDw(xcnt, y + ycnt, Pattern.PatternClr(xcnt, y + ycnt));
689  }
690  }
691  }
692  if (!fRenderTarget) sfcDest->Unlock();
693 }
void DrawPix(C4Surface *sfcDest, float tx, float ty, DWORD dwCol)
Definition: C4Draw.cpp:598
DWORD PatternClr(unsigned int iX, unsigned int iY) const
Definition: C4Draw.cpp:159

References DrawPix(), C4Surface::IsRenderTarget(), C4Surface::Lock(), C4Pattern::PatternClr(), C4Surface::SetPixDw(), and C4Surface::Unlock().

Here is the call graph for this function:

◆ DrawPix()

void C4Draw::DrawPix ( C4Surface sfcDest,
float  tx,
float  ty,
DWORD  dwCol 
)

Definition at line 598 of file C4Draw.cpp.

599 {
600  // Draw
601  C4BltVertex vtx;
602  vtx.ftx = tx;
603  vtx.fty = ty;
604  DwTo4UB(dwClr, vtx.color);
605  PerformMultiPix(sfcDest, &vtx, 1, nullptr);
606 }
unsigned char color[4]
Definition: C4Draw.h:63

References C4BltVertex::color, DwTo4UB(), C4BltVertex::ftx, C4BltVertex::fty, and PerformMultiPix().

Referenced by DrawPatternedCircle().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DrawQuadDw()

void C4Draw::DrawQuadDw ( C4Surface sfcTarget,
float *  ipVtx,
DWORD  dwClr1,
DWORD  dwClr2,
DWORD  dwClr3,
DWORD  dwClr4,
C4ShaderCall shader_call 
)

Definition at line 653 of file C4Draw.cpp.

654 {
655  C4BltVertex vertices[6];
656  vertices[0].ftx = ipVtx[0]; vertices[0].fty = ipVtx[1];
657  vertices[1].ftx = ipVtx[2]; vertices[1].fty = ipVtx[3];
658  vertices[2].ftx = ipVtx[4]; vertices[2].fty = ipVtx[5];
659  vertices[3].ftx = ipVtx[6]; vertices[3].fty = ipVtx[7];
660  DwTo4UB(dwClr1, vertices[0].color);
661  DwTo4UB(dwClr2, vertices[1].color);
662  DwTo4UB(dwClr3, vertices[2].color);
663  DwTo4UB(dwClr4, vertices[3].color);
664  vertices[4] = vertices[0];
665  vertices[5] = vertices[2];
666  PerformMultiTris(sfcTarget, vertices, 6, nullptr, nullptr, nullptr, nullptr, 0, shader_call);
667 }

References DwTo4UB(), C4BltVertex::ftx, C4BltVertex::fty, and PerformMultiTris().

Referenced by DrawBoxFade(), and C4GUI::Tabular::DrawElement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EnsureMainContextSelected()

virtual bool C4Draw::EnsureMainContextSelected ( )
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by C4ViewportList::CloseViewport().

Here is the caller graph for this function:

◆ Error()

bool C4Draw::Error ( const char *  szMsg)
protectedvirtual

Reimplemented in CStdGL.

Definition at line 494 of file C4Draw.cpp.

495 {
496  if (pApp) pApp->Error(szMsg);
497  Log(szMsg); return false;
498 }
bool Log(const char *szMessage)
Definition: C4Log.cpp:204
void Error(const char *m)
Definition: C4App.h:99
C4AbstractApp * pApp
Definition: C4Draw.h:95

References C4AbstractApp::Error(), Log(), and pApp.

Referenced by CStdGL::Error(), and Init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ FillBG()

virtual void C4Draw::FillBG ( DWORD  dwClr = 0)
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by C4LoaderScreen::Draw().

Here is the caller graph for this function:

◆ GetBlitModulation()

bool C4Draw::GetBlitModulation ( DWORD rdwColor)
inline

Definition at line 190 of file C4Draw.h.

190 { rdwColor=BlitModulateClr; return BlitModulated; }

References BlitModulateClr, and BlitModulated.

Referenced by CStdFont::DrawText().

Here is the caller graph for this function:

◆ GetClipRect()

C4Rect C4Draw::GetClipRect ( ) const

Definition at line 724 of file C4Draw.cpp.

725 {
726  int iWdt=std::min(iClipX2, RenderTarget->Wdt-1)-iClipX1+1;
727  int iHgt=std::min(iClipY2, RenderTarget->Hgt-1)-iClipY1+1;
728  int iX=iClipX1; if (iX<0) { iWdt+=iX; iX=0; }
729  int iY=iClipY1; if (iY<0) { iHgt+=iY; iY=0; }
730  return C4Rect(iX, iY, iWdt, iHgt);
731 }
int32_t iClipY2
Definition: C4Draw.h:104
int32_t iClipX1
Definition: C4Draw.h:104
int32_t iClipX2
Definition: C4Draw.h:104
int32_t iClipY1
Definition: C4Draw.h:104
Definition: C4Rect.h:28

References C4Surface::Hgt, iClipX1, iClipX2, iClipY1, iClipY2, RenderTarget, and C4Surface::Wdt.

Referenced by C4LandscapeRenderGL::Draw(), CStdGL::PerformMesh(), CStdGL::SetupMultiBlt(), and CStdGL::UpdateClipper().

Here is the caller graph for this function:

◆ GetFoW()

const C4FoWRegion* C4Draw::GetFoW ( ) const
inline

Definition at line 194 of file C4Draw.h.

194 { return pFoW; }

References pFoW.

Referenced by C4Sky::Draw(), and C4Object::Draw().

Here is the caller graph for this function:

◆ GetOutRect()

C4Rect C4Draw::GetOutRect ( ) const

Definition at line 733 of file C4Draw.cpp.

734 {
735  return C4Rect(0, 0, RenderTarget->Wdt, RenderTarget->Hgt);
736 }

References C4Surface::Hgt, RenderTarget, and C4Surface::Wdt.

Referenced by C4LandscapeRenderGL::Draw(), CStdGL::PerformMesh(), and CStdGL::SetupMultiBlt().

Here is the caller graph for this function:

◆ GetPrimaryClipper()

bool C4Draw::GetPrimaryClipper ( int &  rX1,
int &  rY1,
int &  rX2,
int &  rY2 
)

Definition at line 716 of file C4Draw.cpp.

717 {
718  // Store drawing clip values
719  rX1=fClipX1; rY1=fClipY1; rX2=fClipX2; rY2=fClipY2;
720  // Done
721  return true;
722 }
float fClipX2
Definition: C4Draw.h:102
float fClipY1
Definition: C4Draw.h:102
float fClipY2
Definition: C4Draw.h:102
float fClipX1
Definition: C4Draw.h:102

References fClipX1, fClipX2, fClipY1, and fClipY2.

Referenced by C4GUI::Window::Draw(), C4GUI::MultilineLabel::DrawElement(), and C4GUI::Edit::DrawElement().

Here is the caller graph for this function:

◆ GetSurfaceSize()

bool C4Draw::GetSurfaceSize ( C4Surface sfcSurface,
int &  iWdt,
int &  iHgt 
)

Definition at line 191 of file C4Draw.cpp.

192 {
193  return sfcSurface->GetSurfaceSize(iWdt, iHgt);
194 }
bool GetSurfaceSize(int &irX, int &irY)
Definition: C4Surface.cpp:444

References C4Surface::GetSurfaceSize().

Here is the call graph for this function:

◆ GetZoom()

void C4Draw::GetZoom ( ZoomData r)
inline

Definition at line 197 of file C4Draw.h.

197 { r->Zoom=Zoom; r->X=ZoomX; r->Y=ZoomY; }
float Zoom
Definition: C4Draw.h:70
float X
Definition: C4Draw.h:71
float Y
Definition: C4Draw.h:71

References ZoomData::X, ZoomData::Y, ZoomData::Zoom, Zoom, ZoomX, and ZoomY.

Referenced by C4MouseControl::Draw(), C4GUI::CMouse::Draw(), C4Game::DrawCrewOverheadText(), and ZoomDataStackItem::ZoomDataStackItem().

Here is the caller graph for this function:

◆ Grayscale()

void C4Draw::Grayscale ( C4Surface sfcSfc,
int32_t  iOffset = 0 
)

Definition at line 695 of file C4Draw.cpp.

696 {
697  // safety
698  if (!sfcSfc) return;
699  // change colors
700  int xcnt,ycnt,wdt=sfcSfc->Wdt,hgt=sfcSfc->Hgt;
701  // Lock surface
702  if (!sfcSfc->Lock()) return;
703  for (ycnt=0; ycnt<hgt; ycnt++)
704  {
705  for (xcnt=0; xcnt<wdt; xcnt++)
706  {
707  DWORD dwColor = sfcSfc->GetPixDw(xcnt,ycnt,false);
708  uint32_t r = GetRedValue(dwColor), g = GetGreenValue(dwColor), b = GetBlueValue(dwColor), a = dwColor >> 24;
709  int32_t gray = Clamp<int32_t>((r + g + b) / 3 + iOffset, 0, 255);
710  sfcSfc->SetPixDw(xcnt, ycnt, RGBA(gray, gray, gray, a));
711  }
712  }
713  sfcSfc->Unlock();
714 }
#define a
#define b
uint32_t RGBA(uint32_t r, uint32_t g, uint32_t b, uint32_t a)
Definition: StdColors.h:22
DWORD GetPixDw(int iX, int iY, bool fApplyModulation)
Definition: C4Surface.cpp:491

References a, b, GetBlueValue, GetGreenValue, C4Surface::GetPixDw(), GetRedValue, C4Surface::Hgt, C4Surface::Lock(), RGBA(), C4Surface::SetPixDw(), C4Surface::Unlock(), and C4Surface::Wdt.

Referenced by C4FacetSurface::Grayscale().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Init()

bool C4Draw::Init ( C4AbstractApp pApp,
unsigned int  iXRes,
unsigned int  iYRes,
unsigned int  iMonitor 
)

Definition at line 809 of file C4Draw.cpp.

810 {
811  this->pApp = pApp;
812 
814 
815  if (!RestoreDeviceObjects())
816  return false;
817 
818  if (!CreatePrimaryClipper(iXRes, iYRes))
819  return Error(" Clipper failure.");
820 
821  return true;
822 }
C4Window * pWindow
Definition: C4App.h:80
virtual bool Error(const char *szMsg)
Definition: C4Draw.cpp:494
friend class C4Surface
Definition: C4Draw.h:213
virtual bool RestoreDeviceObjects()=0
bool CreatePrimaryClipper(unsigned int iXRes, unsigned int iYRes)
Definition: C4Draw.cpp:501
C4Surface * pSurface
Definition: C4Window.h:275

References C4Surface, CreatePrimaryClipper(), Error(), pApp, C4Window::pSurface, C4AbstractApp::pWindow, and RestoreDeviceObjects().

Referenced by DDrawInit().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ InvalidateDeviceObjects()

virtual bool C4Draw::InvalidateDeviceObjects ( )
pure virtual

Implemented in CStdNoGfx, and CStdGL.

◆ LockingPrimary()

void C4Draw::LockingPrimary ( )
inline

Definition at line 138 of file C4Draw.h.

138 { PrimaryLocked=true; }
bool PrimaryLocked
Definition: C4Draw.h:106

References PrimaryLocked.

◆ NoPrimaryClipper()

bool C4Draw::NoPrimaryClipper ( )

Definition at line 237 of file C4Draw.cpp.

238 {
239  // apply maximum clipper
240  SetPrimaryClipper(0,0,439832,439832);
241  // Done
242  return true;
243 }

References SetPrimaryClipper().

Referenced by CStdGL::Clear(), C4Viewport::Draw(), C4Landscape::DrawChunks(), C4GUI::Edit::DrawElement(), and C4Landscape::P::MapToSurface().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnResolutionChanged()

virtual bool C4Draw::OnResolutionChanged ( unsigned int  iXRes,
unsigned int  iYRes 
)
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by C4Application::OnResolutionChanged().

Here is the caller graph for this function:

◆ PerformMesh()

virtual void C4Draw::PerformMesh ( StdMeshInstance instance,
float  tx,
float  ty,
float  twdt,
float  thgt,
DWORD  dwPlayerColor,
C4BltTransform pTransform 
)
pure virtual

Implemented in CStdGL, and CStdNoGfx.

Referenced by RenderMesh().

Here is the caller graph for this function:

◆ PerformMultiLines()

virtual void C4Draw::PerformMultiLines ( C4Surface sfcTarget,
const C4BltVertex vertices,
unsigned int  n_vertices,
float  width,
C4ShaderCall shader_call 
)
pure virtual

Implemented in CStdGL, and CStdNoGfx.

Referenced by C4PXSSystem::Draw(), DrawCircleDw(), DrawFrameDw(), C4Object::DrawLine(), DrawLineDw(), and C4EditCursor::DrawSelectMark().

Here is the caller graph for this function:

◆ PerformMultiPix()

virtual void C4Draw::PerformMultiPix ( C4Surface sfcTarget,
const C4BltVertex vertices,
unsigned int  n_vertices,
C4ShaderCall shader_call 
)
pure virtual

Implemented in CStdGL, and CStdNoGfx.

Referenced by Blit8Fast(), C4PXSSystem::Draw(), and DrawPix().

Here is the caller graph for this function:

◆ PerformMultiTris()

virtual void C4Draw::PerformMultiTris ( C4Surface sfcTarget,
const C4BltVertex vertices,
unsigned int  n_vertices,
const C4BltTransform pTransform,
C4TexRef pTex,
C4TexRef pOverlay,
C4TexRef pNormal,
DWORD  dwOverlayClrMod,
C4ShaderCall shader_call 
)
pure virtual

Implemented in CStdGL, and CStdNoGfx.

Referenced by BlitSurfaceTile(), BlitUnscaled(), C4PXSSystem::Draw(), and DrawQuadDw().

Here is the caller graph for this function:

◆ PrepareMaterial()

virtual bool C4Draw::PrepareMaterial ( StdMeshMatManager mat_manager,
StdMeshMaterialLoader loader,
StdMeshMaterial mat 
)
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by StdMeshMatManager::Parse().

Here is the caller graph for this function:

◆ PrepareRendering()

virtual bool C4Draw::PrepareRendering ( C4Surface sfcToSurface)
pure virtual

Implemented in CStdGL, and CStdNoGfx.

Referenced by BlitUnscaled(), C4Viewport::Execute(), RenderMesh(), and StringOut().

Here is the caller graph for this function:

◆ PrepareSpriteShader()

virtual bool C4Draw::PrepareSpriteShader ( C4Shader shader,
const char *  name,
int  ssc,
C4GroupSet pGroups,
const char *const *  additionalDefines,
const char *const *  additionalSlices 
)
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by C4Sky::Init().

Here is the caller graph for this function:

◆ PrimaryUnlocked()

void C4Draw::PrimaryUnlocked ( )
inline

Definition at line 139 of file C4Draw.h.

139 { PrimaryLocked=false; }

References PrimaryLocked.

◆ RemoveZoom()

void C4Draw::RemoveZoom ( float &  X,
float &  Y 
)

Definition at line 784 of file C4Draw.cpp.

785 {
786  X = (X - ZoomX) / Zoom + ZoomX;
787  Y = (Y - ZoomY) / Zoom + ZoomY;
788 }

References X, Zoom, ZoomX, and ZoomY.

◆ RenderMesh()

bool C4Draw::RenderMesh ( StdMeshInstance instance,
C4Surface sfcTarget,
float  tx,
float  ty,
float  twdt,
float  thgt,
DWORD  dwPlayerColor,
C4BltTransform pTransform 
)

Definition at line 397 of file C4Draw.cpp.

398 {
399  // TODO: Emulate rendering
400  if (!sfcTarget->IsRenderTarget()) return false;
401 
402  // TODO: Clip
403 
404  // prepare rendering to surface
405  if (!PrepareRendering(sfcTarget)) return false;
406  // Update bone matrices and vertex data (note this also updates attach transforms and child transforms)
407  instance.UpdateBoneTransforms();
408  // Order faces according to MeshTransformation (note pTransform does not affect Z coordinate, so does not need to be taken into account for correct ordering)
410  if(MeshTransform) mat = *MeshTransform * mat;
411  instance.ReorderFaces(&mat);
412  // Render mesh
413  PerformMesh(instance, tx, ty, twdt, thgt, dwPlayerColor, pTransform);
414  // success
415  return true;
416 }
virtual void PerformMesh(StdMeshInstance &instance, float tx, float ty, float twdt, float thgt, DWORD dwPlayerColor, C4BltTransform *pTransform)=0
void ReorderFaces(StdMeshMatrix *global_trans)
Definition: StdMesh.cpp:1552
bool UpdateBoneTransforms()
Definition: StdMesh.cpp:1471
static StdMeshMatrix Identity()

References StdMeshMatrix::Identity(), C4Surface::IsRenderTarget(), MeshTransform, PerformMesh(), PrepareRendering(), StdMeshInstance::ReorderFaces(), and StdMeshInstance::UpdateBoneTransforms().

Referenced by C4DefGraphics::Draw(), C4GraphicsOverlay::Draw(), and C4Object::DrawFaceImpl().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetBlitMode()

void C4Draw::ResetBlitMode ( )
inline

◆ ResetGamma()

void C4Draw::ResetGamma ( )

Definition at line 754 of file C4Draw.cpp.

755 {
756  for (auto & i : gamma) {
757  i[0] = 1.0f;
758  i[1] = 1.0f;
759  i[2] = 1.0f;
760  }
761  gammaOut[0] = 1.0f;
762  gammaOut[1] = 1.0f;
763  gammaOut[2] = 1.0f;
764 }
float gamma[C4MaxGammaRamps][3]
Definition: C4Draw.h:97

References gamma, and gammaOut.

Referenced by Clear(), Default(), and C4Game::SetDefaultGamma().

Here is the caller graph for this function:

◆ RestoreDeviceObjects()

virtual bool C4Draw::RestoreDeviceObjects ( )
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by Init().

Here is the caller graph for this function:

◆ RestorePrimaryClipper()

bool C4Draw::RestorePrimaryClipper ( )

Definition at line 210 of file C4Draw.cpp.

211 {
212  // Restore primary clipper
214  return true;
215 }
float fStClipX1
Definition: C4Draw.h:103
float fStClipY1
Definition: C4Draw.h:103
float fStClipX2
Definition: C4Draw.h:103
float fStClipY2
Definition: C4Draw.h:103

References fStClipX1, fStClipX2, fStClipY1, fStClipY2, and SetPrimaryClipper().

Referenced by C4ScriptGuiWindow::DrawChildren(), C4GUI::WoodenLabel::DrawElement(), C4GUI::ComboBox::DrawElement(), C4MenuItem::DrawElement(), and C4FoWRegion::Render().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetBlitMode()

void C4Draw::SetBlitMode ( DWORD  dwBlitMode)
inline

Definition at line 191 of file C4Draw.h.

191 { this->dwBlitMode=dwBlitMode & C4GFXBLIT_ALL; } // set blit mode extra flags (additive blits, mod2-modulation, etc.)
#define C4GFXBLIT_ALL
Definition: C4Surface.h:32

References C4GFXBLIT_ALL, and dwBlitMode.

Referenced by C4GraphicsOverlay::Draw(), C4MouseControl::Draw(), C4GUI::Tabular::Sheet::DrawCaption(), C4GUI::Button::DrawElement(), C4GUI::IconButton::DrawElement(), C4GUI::ArrowButton::DrawElement(), C4GUI::CheckBox::DrawElement(), C4GUI::ContextButton::DrawElement(), C4GUI::ComboBox::DrawElement(), C4EditCursor::DrawObject(), C4GraphicsOverlay::DrawPicture(), and C4Object::PrepareDrawing().

Here is the caller graph for this function:

◆ SetFoW()

void C4Draw::SetFoW ( const C4FoWRegion fow)
inline

Definition at line 193 of file C4Draw.h.

193 { pFoW = fow; }

References pFoW.

Referenced by C4Viewport::Draw(), and C4Object::Draw().

Here is the caller graph for this function:

◆ SetGamma()

void C4Draw::SetGamma ( float  r,
float  g,
float  b,
int32_t  iRampIndex 
)

Definition at line 738 of file C4Draw.cpp.

739 {
740  // Set
741  gamma[iRampIndex][0] = r;
742  gamma[iRampIndex][1] = g;
743  gamma[iRampIndex][2] = b;
744  // Recalculate resulting gamma. Note that we flip gamma direction here,
745  // because higher gammaOut means darker.
746  gammaOut[0] = gammaOut[1] = gammaOut[2] = 1.0f;
747  for (auto & i : gamma) {
748  gammaOut[0] /= i[0];
749  gammaOut[1] /= i[1];
750  gammaOut[2] /= i[2];
751  }
752 }

References b, gamma, and gammaOut.

Referenced by C4Game::SetDefaultGamma().

Here is the caller graph for this function:

◆ SetMeshTransform()

void C4Draw::SetMeshTransform ( const StdMeshMatrix Transform)
inline

Definition at line 200 of file C4Draw.h.

200 { MeshTransform = Transform; } // if non-nullptr make sure to keep matrix valid

References MeshTransform.

Referenced by C4DefGraphics::Draw(), C4GraphicsOverlay::Draw(), and C4Object::DrawFaceImpl().

Here is the caller graph for this function:

◆ SetPerspective()

void C4Draw::SetPerspective ( bool  fSet)
inline

Definition at line 201 of file C4Draw.h.

201 { fUsePerspective = fSet; }

References fUsePerspective.

Referenced by C4DefGraphics::Draw().

Here is the caller graph for this function:

◆ SetPrimaryClipper()

bool C4Draw::SetPrimaryClipper ( int  iX1,
int  iY1,
int  iX2,
int  iY2 
)

Definition at line 217 of file C4Draw.cpp.

218 {
219  // set clipper
220  fClipX1=iX1; fClipY1=iY1; fClipX2=iX2; fClipY2=iY2;
221  iClipX1=iX1; iClipY1=iY1; iClipX2=iX2; iClipY2=iY2;
222  UpdateClipper();
223  // Done
224  return true;
225 }
virtual bool UpdateClipper()=0

References fClipX1, fClipX2, fClipY1, fClipY2, iClipX1, iClipX2, iClipY1, iClipY2, and UpdateClipper().

Referenced by CreatePrimaryClipper(), C4GUI::Window::Draw(), C4Viewport::Draw(), C4ScriptGuiWindow::DrawChildren(), C4GUI::WoodenLabel::DrawElement(), C4GUI::Edit::DrawElement(), NoPrimaryClipper(), RestorePrimaryClipper(), and SubPrimaryClipper().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetZoom() [1/2]

void C4Draw::SetZoom ( const ZoomData zoom)
inline

Definition at line 196 of file C4Draw.h.

196 { SetZoom(zoom.X, zoom.Y, zoom.Zoom); }
void SetZoom(float X, float Y, float Zoom)
Definition: C4Draw.cpp:773

References SetZoom(), ZoomData::X, ZoomData::Y, and ZoomData::Zoom.

Referenced by SetZoom().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetZoom() [2/2]

void C4Draw::SetZoom ( float  X,
float  Y,
float  Zoom 
)

Definition at line 773 of file C4Draw.cpp.

774 {
775  this->ZoomX = X; this->ZoomY = Y; this->Zoom = Zoom;
776 }

References X, Zoom, ZoomX, and ZoomY.

Referenced by C4Viewport::Draw(), C4MouseControl::Draw(), C4GUI::CMouse::Draw(), C4Game::DrawCrewOverheadText(), C4Viewport::DrawMenu(), ZoomDataStackItem::ZoomDataStackItem(), and ZoomDataStackItem::~ZoomDataStackItem().

Here is the caller graph for this function:

◆ StorePrimaryClipper()

bool C4Draw::StorePrimaryClipper ( )

Definition at line 203 of file C4Draw.cpp.

204 {
205  // Store current primary clipper
207  return true;
208 }

References fClipX1, fClipX2, fClipY1, fClipY2, fStClipX1, fStClipX2, fStClipY1, and fStClipY2.

Referenced by CreatePrimaryClipper(), C4ScriptGuiWindow::DrawChildren(), C4GUI::WoodenLabel::DrawElement(), C4GUI::ComboBox::DrawElement(), C4MenuItem::DrawElement(), and C4FoWRegion::Render().

Here is the caller graph for this function:

◆ StringOut() [1/2]

bool C4Draw::StringOut ( const char *  szText,
C4Surface sfcDest,
float  iTx,
float  iTy,
DWORD  dwFCol,
BYTE  byForm,
bool  fDoMarkup,
C4Markup Markup,
CStdFont pFont,
float  fZoom 
)
protected

Definition at line 578 of file C4Draw.cpp.

579 {
580  // clip
581  if (ClipAll) return true;
582  // safety
583  if (!PrepareRendering(sfcDest)) return false;
584  // convert align
585  int iFlags=0;
586  switch (byForm)
587  {
588  case ACenter: iFlags |= STDFONT_CENTERED; break;
589  case ARight: iFlags |= STDFONT_RIGHTALGN; break;
590  }
591  if (!fDoMarkup) iFlags|=STDFONT_NOMARKUP;
592  // draw text
593  pFont->DrawText(sfcDest, iTx , iTy , dwFCol, szText, iFlags, Markup, fZoom);
594  // done, success
595  return true;
596 }
#define STDFONT_NOMARKUP
Definition: C4FontLoader.h:33
#define STDFONT_CENTERED
Definition: C4FontLoader.h:28
#define STDFONT_RIGHTALGN
Definition: C4FontLoader.h:31
const int ARight
Definition: C4Surface.h:41
const int ACenter
Definition: C4Surface.h:41
void DrawText(C4Surface *sfcDest, float iX, float iY, DWORD dwColor, const char *szText, DWORD dwFlags, C4Markup &Markup, float fZoom)

References ACenter, ARight, ClipAll, CStdFont::DrawText(), PrepareRendering(), STDFONT_CENTERED, STDFONT_NOMARKUP, and STDFONT_RIGHTALGN.

Here is the call graph for this function:

◆ StringOut() [2/2]

bool C4Draw::StringOut ( const char *  szText,
CStdFont rFont,
float  fZoom,
C4Surface sfcDest,
float  iTx,
float  iTy,
DWORD  dwFCol = 0xffffffff,
BYTE  byForm = ALeft,
bool  fDoMarkup = true 
)

Definition at line 570 of file C4Draw.cpp.

571 {
572  // init markup
573  C4Markup Markup(true);
574  // output string
575  return StringOut(szText, sfcDest, iTx, iTy, dwFCol, byForm, fDoMarkup, Markup, &rFont, fZoom);
576 }
bool StringOut(const char *szText, CStdFont &rFont, float fZoom, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol=0xffffffff, BYTE byForm=ALeft, bool fDoMarkup=true)
Definition: C4Draw.cpp:570

Referenced by C4MessageBoard::Draw(), C4LoaderScreen::Draw(), and TextOut().

Here is the caller graph for this function:

◆ SubPrimaryClipper()

bool C4Draw::SubPrimaryClipper ( int  iX1,
int  iY1,
int  iX2,
int  iY2 
)

Definition at line 196 of file C4Draw.cpp.

197 {
198  // Set sub primary clipper
199  SetPrimaryClipper(std::max(iX1,iClipX1),std::max(iY1,iClipY1),std::min(iX2,iClipX2),std::min(iY2,iClipY2));
200  return true;
201 }

References iClipX1, iClipX2, iClipY1, iClipY2, and SetPrimaryClipper().

Referenced by C4GUI::Window::Draw(), C4GUI::ComboBox::DrawElement(), and C4MenuItem::DrawElement().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ TextOut()

bool C4Draw::TextOut ( const char *  szText,
CStdFont rFont,
float  fZoom,
C4Surface sfcDest,
float  iTx,
float  iTy,
DWORD  dwFCol = 0xffffffff,
BYTE  byForm = ALeft,
bool  fDoMarkup = true 
)

Definition at line 561 of file C4Draw.cpp.

562 {
563  C4Markup Markup(true);
564  static char szLinebuf[2500+1];
565  for (int cnt=0; SCopySegmentEx(szText,cnt,szLinebuf,fDoMarkup ? '|' : '\n','\n',2500); cnt++,iTy+=int(fZoom*rFont.GetLineHeight()))
566  if (!StringOut(szLinebuf,sfcDest,iTx,iTy,dwFCol,byForm,fDoMarkup,Markup,&rFont,fZoom)) return false;
567  return true;
568 }
bool SCopySegmentEx(const char *szString, int iSegment, char *sTarget, char cSep1, char cSep2, int iMaxL, bool fSkipWhitespace)
Definition: Standard.cpp:298
int GetLineHeight() const
Definition: C4FontLoader.h:125

References CStdFont::GetLineHeight(), SCopySegmentEx(), and StringOut().

Referenced by C4UpperBoard::Draw(), C4LoaderScreen::Draw(), C4IDList::Draw(), C4Object::Draw(), C4GameMessage::Draw(), C4ScriptGuiWindow::Draw(), C4GUI::Tabular::Sheet::DrawCaption(), C4Game::DrawCrewOverheadText(), C4GUI::Label::DrawElement(), C4GUI::WoodenLabel::DrawElement(), C4GUI::MultilineLabel::DrawElement(), C4GUI::ProgressBar::DrawElement(), C4GUI::GroupBox::DrawElement(), C4GUI::Button::DrawElement(), C4GUI::IconButton::DrawElement(), C4GUI::FacetButton::DrawElement(), C4GUI::Edit::DrawElement(), C4GUI::CheckBox::DrawElement(), C4GUI::ContextMenu::Entry::DrawElement(), C4GUI::ComboBox::DrawElement(), C4MenuItem::DrawElement(), C4ScoreboardDlg::DrawElement(), C4StartupMainDlg::DrawElement(), C4Chart::DrawElement(), C4Viewport::DrawMenu(), C4Viewport::DrawPlayerStartup(), C4Network2::DrawStatus(), C4GUI::Screen::DrawToolTip(), C4Facet::DrawValue(), and C4Facet::DrawValue2().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateClipper()

virtual bool C4Draw::UpdateClipper ( )
pure virtual

Implemented in CStdNoGfx, and CStdGL.

Referenced by SetPrimaryClipper().

Here is the caller graph for this function:

Friends And Related Function Documentation

◆ C4Pattern

friend class C4Pattern
friend

Definition at line 215 of file C4Draw.h.

◆ C4Surface

friend class C4Surface
friend

Definition at line 213 of file C4Draw.h.

Referenced by Init().

◆ C4TexRef

friend class C4TexRef
friend

Definition at line 214 of file C4Draw.h.

Member Data Documentation

◆ Active

◆ BlitModulateClr

DWORD C4Draw::BlitModulateClr
protected

◆ BlitModulated

◆ ClipAll

bool C4Draw::ClipAll
protected

Definition at line 105 of file C4Draw.h.

Referenced by BlitUnscaled(), Default(), StringOut(), and CStdGL::UpdateClipper().

◆ COLOR_DEPTH

constexpr int C4Draw::COLOR_DEPTH = 32
staticconstexpr

Definition at line 89 of file C4Draw.h.

Referenced by C4Application::ApplyResolutionConstraints().

◆ COLOR_DEPTH_BYTES

constexpr int C4Draw::COLOR_DEPTH_BYTES = COLOR_DEPTH / 8
staticconstexpr

Definition at line 90 of file C4Draw.h.

Referenced by C4TexRef::C4TexRef(), C4TexRef::Lock(), and C4TexRef::LockForUpdate().

◆ dwBlitMode

◆ fClipX1

float C4Draw::fClipX1
protected

Definition at line 102 of file C4Draw.h.

Referenced by GetPrimaryClipper(), SetPrimaryClipper(), and StorePrimaryClipper().

◆ fClipX2

float C4Draw::fClipX2
protected

Definition at line 102 of file C4Draw.h.

Referenced by GetPrimaryClipper(), SetPrimaryClipper(), and StorePrimaryClipper().

◆ fClipY1

float C4Draw::fClipY1
protected

Definition at line 102 of file C4Draw.h.

Referenced by GetPrimaryClipper(), SetPrimaryClipper(), and StorePrimaryClipper().

◆ fClipY2

float C4Draw::fClipY2
protected

Definition at line 102 of file C4Draw.h.

Referenced by GetPrimaryClipper(), SetPrimaryClipper(), and StorePrimaryClipper().

◆ fStClipX1

float C4Draw::fStClipX1
protected

Definition at line 103 of file C4Draw.h.

Referenced by RestorePrimaryClipper(), and StorePrimaryClipper().

◆ fStClipX2

float C4Draw::fStClipX2
protected

Definition at line 103 of file C4Draw.h.

Referenced by RestorePrimaryClipper(), and StorePrimaryClipper().

◆ fStClipY1

float C4Draw::fStClipY1
protected

Definition at line 103 of file C4Draw.h.

Referenced by RestorePrimaryClipper(), and StorePrimaryClipper().

◆ fStClipY2

float C4Draw::fStClipY2
protected

Definition at line 103 of file C4Draw.h.

Referenced by RestorePrimaryClipper(), and StorePrimaryClipper().

◆ fUsePerspective

bool C4Draw::fUsePerspective
protected

Definition at line 114 of file C4Draw.h.

Referenced by Default(), CStdGL::PerformMesh(), and SetPerspective().

◆ gamma

float C4Draw::gamma[C4MaxGammaRamps][3]

Definition at line 97 of file C4Draw.h.

Referenced by C4Weather::CompileFunc(), ResetGamma(), and SetGamma().

◆ gammaOut

float C4Draw::gammaOut[3]

◆ iClipX1

int32_t C4Draw::iClipX1
protected

Definition at line 104 of file C4Draw.h.

Referenced by GetClipRect(), SetPrimaryClipper(), and SubPrimaryClipper().

◆ iClipX2

int32_t C4Draw::iClipX2
protected

Definition at line 104 of file C4Draw.h.

Referenced by GetClipRect(), SetPrimaryClipper(), and SubPrimaryClipper().

◆ iClipY1

int32_t C4Draw::iClipY1
protected

Definition at line 104 of file C4Draw.h.

Referenced by GetClipRect(), SetPrimaryClipper(), and SubPrimaryClipper().

◆ iClipY2

int32_t C4Draw::iClipY2
protected

Definition at line 104 of file C4Draw.h.

Referenced by GetClipRect(), SetPrimaryClipper(), and SubPrimaryClipper().

◆ MaxTexSize

int C4Draw::MaxTexSize {0}

◆ MeshTransform

const StdMeshMatrix* C4Draw::MeshTransform
protected

Definition at line 113 of file C4Draw.h.

Referenced by Default(), CStdGL::PerformMesh(), RenderMesh(), and SetMeshTransform().

◆ pApp

◆ pFoW

const C4FoWRegion* C4Draw::pFoW
protected

Definition at line 111 of file C4Draw.h.

Referenced by Default(), GetFoW(), CStdGL::PerformMesh(), SetFoW(), and CStdGL::SetupMultiBlt().

◆ PrimaryLocked

bool C4Draw::PrimaryLocked
protected

Definition at line 106 of file C4Draw.h.

Referenced by LockingPrimary(), and PrimaryUnlocked().

◆ RenderTarget

◆ scriptUniform

C4ScriptUniform C4Draw::scriptUniform

◆ Zoom

◆ ZoomX

float C4Draw::ZoomX
protected

◆ ZoomY

float C4Draw::ZoomY
protected

The documentation for this class was generated from the following files: