[Scummvm-git-logs] scummvm master -> c3da539ae522821870cd741e10501739951fb397
neuromancer
noreply at scummvm.org
Tue Mar 14 18:57:44 UTC 2023
This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
07cc653455 FREESCAPE: improved stipple generation
c3da539ae5 FREESCAPE: improved and optimized stipple pattern usage
Commit: 07cc653455d702fa4a3c8d5270452fa5f7362769
https://github.com/scummvm/scummvm/commit/07cc653455d702fa4a3c8d5270452fa5f7362769
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-03-14T19:54:26+01:00
Commit Message:
FREESCAPE: improved stipple generation
Changed paths:
engines/freescape/gfx.cpp
engines/freescape/gfx.h
diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index dde88da0dee..bcab1f61574 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -54,6 +54,7 @@ Renderer::Renderer(int screenW, int screenH, Common::RenderMode renderMode) {
_stipples[1][i] = 0;
_stipples[2][i] = 0;
_stipples[3][i] = 0;
+ _colorPair[i] = 0;
}
}
@@ -126,6 +127,45 @@ byte getCGAStipple(byte x, int back, int fore) {
return st;
}
+void Renderer::fillColorPairArray() {
+ for (int i = 4; i < 15; i++) {
+ byte *entry = (*_colorMap)[i];
+ int c1;
+ if (_renderMode == Common::kRenderCGA)
+ c1 = getCGAPixel(entry[0], 0);
+ else if (_renderMode == Common::kRenderCPC)
+ c1 = getCPCPixel(entry[0], 0);
+ else
+ error("Not implemented");
+
+ //debug("c1 = %d", c1);
+ int c2 = -1;
+
+ for (int j = 0; j < 4; j++) {
+ int k, c;
+ for (k = 0; k < 4; k++) {
+ if (_renderMode == Common::kRenderCGA)
+ c = getCGAPixel(entry[j], k);
+ else if (_renderMode == Common::kRenderCPC)
+ c = getCPCPixel(entry[j], k);
+ else
+ error("Not implemented");
+ //debug("c = %d", c);
+ if (c1 != c) {
+ c2 = c;
+ break;
+ }
+ }
+ if (k != 4)
+ break;
+ }
+ assert(c2 >= 0);
+ assert((c1 < 16) & (c2 < 16));
+ _colorPair[i] = byte(c1) | (byte(c2) << 4);
+ //debug("pair: %x", _colorPair[i]);
+ }
+}
+
void Renderer::setColorMap(ColorMap *colorMap_) {
_colorMap = colorMap_;
if (_renderMode == Common::kRenderZX) {
@@ -137,6 +177,7 @@ void Renderer::setColorMap(ColorMap *colorMap_) {
_stipples[3][i] = entry[3];
}
} else if (_renderMode == Common::kRenderCPC) {
+ fillColorPairArray();
for (int i = 0; i < 15; i++) {
byte *entry = (*_colorMap)[i];
int i1 = getCPCPixel(entry[0], 0);
@@ -147,14 +188,16 @@ void Renderer::setColorMap(ColorMap *colorMap_) {
_stipples[3][i] = getCPCStipple(entry[3], i1, i2);
}
} else if (_renderMode == Common::kRenderCGA) {
- for (int i = 0; i < 15; i++) {
+ fillColorPairArray();
+ for (int i = 4; i < 15; i++) {
byte *entry = (*_colorMap)[i];
- int i1 = getCGAPixel(entry[0], 0);
- int i2 = getCGAPixel(entry[0], 1);
- _stipples[0][i] = getCGAStipple(entry[0], i1, i2);
- _stipples[1][i] = getCGAStipple(entry[1], i1, i2);
- _stipples[2][i] = getCGAStipple(entry[2], i1, i2);
- _stipples[3][i] = getCGAStipple(entry[3], i1, i2);
+ byte pair = _colorPair[i];
+ byte c1 = pair & 0xf;
+ byte c2 = (pair >> 4) & 0xf;
+ _stipples[0][i] = getCGAStipple(entry[0], c1, c2);
+ _stipples[1][i] = getCGAStipple(entry[1], c1, c2);
+ _stipples[2][i] = getCGAStipple(entry[2], c1, c2);
+ _stipples[3][i] = getCGAStipple(entry[3], c1, c2);
}
}
}
@@ -198,9 +241,9 @@ bool Renderer::getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
stipple[3] = _stipples[3][index - 1];
}
- byte *entry = (*_colorMap)[index - 1];
- uint8 c1 = getCGAPixel(entry[0], 0);
- uint8 c2 = getCGAPixel(entry[0], 1);
+ byte pair = _colorPair[index - 1];
+ byte c1 = pair & 0xf;
+ byte c2 = (pair >> 4) & 0xf;
readFromPalette(c1, r1, g1, b1);
readFromPalette(c2, r2, g2, b2);
return true;
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index ff6612ee011..8c948e05068 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -116,6 +116,8 @@ public:
void setColorMap(ColorMap *colorMap_);
ColorMap *_colorMap;
ColorReMap *_colorRemaps;
+ void fillColorPairArray();
+ byte _colorPair[16];
int _keyColor;
int _inkColor;
int _paperColor;
Commit: c3da539ae522821870cd741e10501739951fb397
https://github.com/scummvm/scummvm/commit/c3da539ae522821870cd741e10501739951fb397
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2023-03-14T19:54:26+01:00
Commit Message:
FREESCAPE: improved and optimized stipple pattern usage
Changed paths:
engines/freescape/gfx.cpp
engines/freescape/gfx.h
engines/freescape/gfx_opengl.cpp
engines/freescape/gfx_opengl.h
engines/freescape/gfx_tinygl.cpp
diff --git a/engines/freescape/gfx.cpp b/engines/freescape/gfx.cpp
index bcab1f61574..b31730da1f5 100644
--- a/engines/freescape/gfx.cpp
+++ b/engines/freescape/gfx.cpp
@@ -50,10 +50,9 @@ Renderer::Renderer(int screenW, int screenH, Common::RenderMode renderMode) {
_isAccelerated = false;
for (int i = 0; i < 16; i++) {
- _stipples[0][i] = 0;
- _stipples[1][i] = 0;
- _stipples[2][i] = 0;
- _stipples[3][i] = 0;
+ for (int j = 0; j < 128; j++) {
+ _stipples[i][j] = 0;
+ }
_colorPair[i] = 0;
}
}
@@ -77,13 +76,13 @@ byte getCPCStipple(byte cpc_byte, int back, int fore) {
st = st | 0x3;
if (c1 == fore)
- st = st | (2 << 0x3);
+ st = st | (0x3 << 2);
if (c2 == fore)
- st = st | (4 << 0x3);
+ st = st | (0x3 << 4);
if (c3 == fore)
- st = st | (6 << 0x3);
+ st = st | (0x3 << 6);
return st;
}
@@ -116,13 +115,13 @@ byte getCGAStipple(byte x, int back, int fore) {
st = st | 0x3;
if (c1 == fore)
- st = st | (2 << 0x3);
+ st = st | (0x3 << 2);
if (c2 == fore)
- st = st | (4 << 0x3);
+ st = st | (0x3 << 4);
if (c3 == fore)
- st = st | (6 << 0x3);
+ st = st | (0x3 << 6);
return st;
}
@@ -138,7 +137,6 @@ void Renderer::fillColorPairArray() {
else
error("Not implemented");
- //debug("c1 = %d", c1);
int c2 = -1;
for (int j = 0; j < 4; j++) {
@@ -150,7 +148,6 @@ void Renderer::fillColorPairArray() {
c = getCPCPixel(entry[j], k);
else
error("Not implemented");
- //debug("c = %d", c);
if (c1 != c) {
c2 = c;
break;
@@ -162,7 +159,6 @@ void Renderer::fillColorPairArray() {
assert(c2 >= 0);
assert((c1 < 16) & (c2 < 16));
_colorPair[i] = byte(c1) | (byte(c2) << 4);
- //debug("pair: %x", _colorPair[i]);
}
}
@@ -171,33 +167,28 @@ void Renderer::setColorMap(ColorMap *colorMap_) {
if (_renderMode == Common::kRenderZX) {
for (int i = 0; i < 15; i++) {
byte *entry = (*_colorMap)[i];
- _stipples[0][i] = entry[0];
- _stipples[1][i] = entry[1];
- _stipples[2][i] = entry[2];
- _stipples[3][i] = entry[3];
+ for (int j = 0; j < 128; j++)
+ _stipples[i][j] = entry[(j / 16) % 4];
}
} else if (_renderMode == Common::kRenderCPC) {
fillColorPairArray();
- for (int i = 0; i < 15; i++) {
+ for (int i = 4; i < 15; i++) {
+ byte pair = _colorPair[i];
+ byte c1 = pair & 0xf;
+ byte c2 = (pair >> 4) & 0xf;
byte *entry = (*_colorMap)[i];
- int i1 = getCPCPixel(entry[0], 0);
- int i2 = getCPCPixel(entry[0], 1);
- _stipples[0][i] = getCPCStipple(entry[0], i1, i2);
- _stipples[1][i] = getCPCStipple(entry[1], i1, i2);
- _stipples[2][i] = getCPCStipple(entry[2], i1, i2);
- _stipples[3][i] = getCPCStipple(entry[3], i1, i2);
+ for (int j = 0; j < 128; j++)
+ _stipples[i][j] = getCPCStipple(entry[(j / 8) % 4], c1, c2) ;
}
} else if (_renderMode == Common::kRenderCGA) {
fillColorPairArray();
for (int i = 4; i < 15; i++) {
- byte *entry = (*_colorMap)[i];
byte pair = _colorPair[i];
byte c1 = pair & 0xf;
byte c2 = (pair >> 4) & 0xf;
- _stipples[0][i] = getCGAStipple(entry[0], c1, c2);
- _stipples[1][i] = getCGAStipple(entry[1], c1, c2);
- _stipples[2][i] = getCGAStipple(entry[2], c1, c2);
- _stipples[3][i] = getCGAStipple(entry[3], c1, c2);
+ byte *entry = (*_colorMap)[i];
+ for (int j = 0; j < 128; j++)
+ _stipples[i][j] = getCGAStipple(entry[(j / 8) % 4], c1, c2) ;
}
}
}
@@ -221,7 +212,7 @@ void Renderer::setColorRemaps(ColorReMap *colorRemaps) {
_colorRemaps = colorRemaps;
}
-bool Renderer::getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple) {
+bool Renderer::getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple) {
if (index == _keyColor)
return false;
@@ -234,13 +225,7 @@ bool Renderer::getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
return true;
}
- if (stipple) {
- stipple[0] = _stipples[0][index - 1];
- stipple[1] = _stipples[1][index - 1];
- stipple[2] = _stipples[2][index - 1];
- stipple[3] = _stipples[3][index - 1];
- }
-
+ stipple = (byte *)_stipples[index - 1];
byte pair = _colorPair[index - 1];
byte c1 = pair & 0xf;
byte c2 = (pair >> 4) & 0xf;
@@ -315,7 +300,7 @@ bool Renderer::getRGBAtC64(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
return true;
}
-bool Renderer::getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple) {
+bool Renderer::getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple) {
if (index == _keyColor)
return false;
@@ -332,12 +317,7 @@ bool Renderer::getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r
return true;
}
- if (stipple) {
- stipple[0] = _stipples[0][index - 1];
- stipple[1] = _stipples[1][index - 1];
- stipple[2] = _stipples[2][index - 1];
- stipple[3] = _stipples[3][index - 1];
- }
+ stipple = (byte *)_stipples[index - 1];
readFromPalette(_paperColor, r1, g1, b1);
readFromPalette(_inkColor, r2, g2, b2);
@@ -359,7 +339,7 @@ void Renderer::selectColorFromFourColorPalette(uint8 index, uint8 &r1, uint8 &g1
error("Invalid color");
}
-bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple) {
+bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple) {
if (index == _keyColor)
return false;
@@ -372,13 +352,7 @@ bool Renderer::getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
return true;
}
- if (stipple) {
- stipple[0] = _stipples[0][index - 1];
- stipple[1] = _stipples[1][index - 1];
- stipple[2] = _stipples[2][index - 1];
- stipple[3] = _stipples[3][index - 1];
- }
-
+ stipple = (byte *)_stipples[index - 1];
byte *entry = (*_colorMap)[index - 1];
uint8 i1 = getCPCPixel(entry[0], 0);
uint8 i2 = getCPCPixel(entry[0], 1);
@@ -409,7 +383,7 @@ bool Renderer::getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &
return true;
}
-bool Renderer::getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple) {
+bool Renderer::getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple) {
if (_colorRemaps && _colorRemaps->contains(index)) {
index = (*_colorRemaps)[index];
@@ -584,10 +558,10 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
}
Common::Array<Math::Vector3d> face;
- uint32 stipple = 0;
+ byte *stipple = nullptr;
uint8 r1, g1, b1, r2, g2, b2;
- if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[4]);
@@ -607,8 +581,8 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
face.clear();
}
- if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[5]);
@@ -627,8 +601,8 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
face.clear();
}
- if (getRGBAt((*colours)[2], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[2], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[6]);
@@ -646,8 +620,8 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
face.clear();
}
- if (getRGBAt((*colours)[3], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[3], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[7]);
@@ -666,8 +640,8 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
face.clear();
}
- if (getRGBAt((*colours)[4], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[4], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[0]);
@@ -685,8 +659,8 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
face.clear();
}
- if (getRGBAt((*colours)[5], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[5], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(vertices[7]);
@@ -704,12 +678,12 @@ void Renderer::renderPyramid(const Math::Vector3d &origin, const Math::Vector3d
}
void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &size, Common::Array<uint8> *colours) {
- uint32 stipple = 0;
+ byte *stipple = nullptr;
uint8 r1, g1, b1, r2, g2, b2;
Common::Array<Math::Vector3d> face;
- if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.push_back(origin);
face.push_back(Math::Vector3d(origin.x(), origin.y(), origin.z() + size.z()));
@@ -724,8 +698,8 @@ void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &si
}
}
- if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.clear();
face.push_back(Math::Vector3d(origin.x() + size.x(), origin.y() + size.y(), origin.z()));
@@ -741,8 +715,8 @@ void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &si
}
}
- if (getRGBAt((*colours)[2], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[2], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.clear();
face.push_back(Math::Vector3d(origin.x() + size.x(), origin.y(), origin.z()));
@@ -758,8 +732,8 @@ void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &si
}
}
- if (getRGBAt((*colours)[3], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[3], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.clear();
face.push_back(Math::Vector3d(origin.x(), origin.y() + size.y(), origin.z()));
@@ -775,8 +749,8 @@ void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &si
}
}
- if (getRGBAt((*colours)[4], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[4], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.clear();
face.push_back(Math::Vector3d(origin.x(), origin.y() + size.y(), origin.z()));
@@ -792,8 +766,8 @@ void Renderer::renderCube(const Math::Vector3d &origin, const Math::Vector3d &si
}
}
- if (getRGBAt((*colours)[5], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[5], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
face.clear();
face.push_back(Math::Vector3d(origin.x(), origin.y(), origin.z() + size.z()));
@@ -817,13 +791,13 @@ void Renderer::renderRectangle(const Math::Vector3d &origin, const Math::Vector3
float dx, dy, dz;
uint8 r1, g1, b1, r2, g2, b2;
- uint32 stipple = 0;
+ byte *stipple = nullptr;
Common::Array<Math::Vector3d> vertices;
for (int i = 0; i < 2; i++) {
// debug("rec color: %d", (*colours)[i]);
- if (getRGBAt((*colours)[i], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[i], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
vertices.clear();
vertices.push_back(Math::Vector3d(origin.x(), origin.y(), origin.z()));
@@ -875,7 +849,7 @@ void Renderer::renderRectangle(const Math::Vector3d &origin, const Math::Vector3
void Renderer::renderPolygon(const Math::Vector3d &origin, const Math::Vector3d &size, const Common::Array<uint16> *ordinates, Common::Array<uint8> *colours) {
uint8 r1, g1, b1, r2, g2, b2;
- uint32 stipple = 0;
+ byte *stipple = nullptr;
if (ordinates->size() % 3 > 0 && ordinates->size() > 0)
error("Invalid polygon with size %f %f %f and ordinates %d", size.x(), size.y(), size.z(), ordinates->size());
@@ -883,8 +857,8 @@ void Renderer::renderPolygon(const Math::Vector3d &origin, const Math::Vector3d
polygonOffset(true);
if (ordinates->size() == 6) { // Line
- assert(getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, (byte *)&stipple)); // It will never return false?
- setStippleData((byte *)&stipple);
+ assert(getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, stipple)); // It will never return false?
+ setStippleData(stipple);
useColor(r1, g1, b1);
for (uint i = 0; i < ordinates->size(); i = i + 3)
vertices.push_back(Math::Vector3d((*ordinates)[i], (*ordinates)[i + 1], (*ordinates)[i + 2]));
@@ -897,8 +871,8 @@ void Renderer::renderPolygon(const Math::Vector3d &origin, const Math::Vector3d
}
vertices.clear();
- assert(getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, (byte *)&stipple)); // It will never return false?
- setStippleData((byte *)&stipple);
+ assert(getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, stipple)); // It will never return false?
+ setStippleData(stipple);
useColor(r1, g1, b1);
for (int i = ordinates->size(); i > 0; i = i - 3)
vertices.push_back(Math::Vector3d((*ordinates)[i - 3], (*ordinates)[i - 2], (*ordinates)[i - 1]));
@@ -911,8 +885,8 @@ void Renderer::renderPolygon(const Math::Vector3d &origin, const Math::Vector3d
}
} else {
- if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[0], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
for (uint i = 0; i < ordinates->size(); i = i + 3) {
vertices.push_back(Math::Vector3d((*ordinates)[i], (*ordinates)[i + 1], (*ordinates)[i + 2]));
@@ -926,8 +900,8 @@ void Renderer::renderPolygon(const Math::Vector3d &origin, const Math::Vector3d
}
}
vertices.clear();
- if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, (byte *)&stipple)) {
- setStippleData((byte *)&stipple);
+ if (getRGBAt((*colours)[1], r1, g1, b1, r2, g2, b2, stipple)) {
+ setStippleData(stipple);
useColor(r1, g1, b1);
for (int i = ordinates->size(); i > 0; i = i - 3) {
vertices.push_back(Math::Vector3d((*ordinates)[i - 3], (*ordinates)[i - 2], (*ordinates)[i - 1]));
diff --git a/engines/freescape/gfx.h b/engines/freescape/gfx.h
index 8c948e05068..6bae31840c9 100644
--- a/engines/freescape/gfx.h
+++ b/engines/freescape/gfx.h
@@ -99,12 +99,12 @@ public:
// palette
void readFromPalette(uint8 index, uint8 &r, uint8 &g, uint8 &b);
uint8 indexFromColor(uint8 r, uint8 g, uint8 b);
- bool getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
+ bool getRGBAt(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
bool getRGBAtC64(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
- bool getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
- bool getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
+ bool getRGBAtCGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
+ bool getRGBAtCPC(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
bool getRGBAtEGA(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2);
- bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *stipple);
+ bool getRGBAtZX(uint8 index, uint8 &r1, uint8 &g1, uint8 &b1, uint8 &r2, uint8 &g2, uint8 &b2, byte *&stipple);
void extractCPCIndexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
void extractC64Indexes(uint8 cm1, uint8 cm2, uint8 &i1, uint8 &i2);
@@ -122,7 +122,7 @@ public:
int _inkColor;
int _paperColor;
int _underFireBackgroundColor;
- byte _stipples[4][16];
+ byte _stipples[16][128];
/**
* Select the window where to render
diff --git a/engines/freescape/gfx_opengl.cpp b/engines/freescape/gfx_opengl.cpp
index 13f08e5db49..2848f48e9fb 100644
--- a/engines/freescape/gfx_opengl.cpp
+++ b/engines/freescape/gfx_opengl.cpp
@@ -42,6 +42,7 @@ OpenGLRenderer::OpenGLRenderer(int screenW, int screenH, Common::RenderMode rend
_coords = (Coord *)malloc(sizeof(Coord) * kCoordsArraySize);
_texturePixelFormat = OpenGLTexture::getRGBAPixelFormat();
_isAccelerated = true;
+ _variableStippleArray = nullptr;
}
OpenGLRenderer::~OpenGLRenderer() {
@@ -276,8 +277,9 @@ void OpenGLRenderer::setStippleData(byte *data) {
if (!data)
return;
- for (int i = 0; i < 128; i++)
- _variableStippleArray[i] = data[(i / 16) % 4];
+ _variableStippleArray = data;
+ //for (int i = 0; i < 128; i++)
+ // _variableStippleArray[i] = data[(i / 16) % 4];
}
void OpenGLRenderer::useStipple(bool enabled) {
@@ -316,8 +318,8 @@ void OpenGLRenderer::clear(uint8 color) {
void OpenGLRenderer::drawFloor(uint8 color) {
uint8 r1, g1, b1, r2, g2, b2;
- uint32 stipple = 0;
- assert(getRGBAt(color, r1, g1, b1, r2, g2, b2, (byte *)&stipple)); // TODO: move check inside this function
+ byte *stipple;
+ assert(getRGBAt(color, r1, g1, b1, r2, g2, b2, stipple)); // TODO: move check inside this function
glColor3ub(r1, g1, b1);
glEnableClientState(GL_VERTEX_ARRAY);
diff --git a/engines/freescape/gfx_opengl.h b/engines/freescape/gfx_opengl.h
index cc9536eac79..a3925a8d4ba 100644
--- a/engines/freescape/gfx_opengl.h
+++ b/engines/freescape/gfx_opengl.h
@@ -79,24 +79,7 @@ public:
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
};
- GLubyte _variableStippleArray[128] = {
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
- };
+ GLubyte *_variableStippleArray;
virtual void init() override;
virtual void clear(uint8 color) override;
diff --git a/engines/freescape/gfx_tinygl.cpp b/engines/freescape/gfx_tinygl.cpp
index 5688ffb76c2..ea2318ba36c 100644
--- a/engines/freescape/gfx_tinygl.cpp
+++ b/engines/freescape/gfx_tinygl.cpp
@@ -227,7 +227,8 @@ void TinyGLRenderer::clear(uint8 color) {
void TinyGLRenderer::drawFloor(uint8 color) {
uint8 r1, g1, b1, r2, g2, b2;
- assert(getRGBAt(color, r1, g1, b1, r2, g2, b2, nullptr)); // TODO: move check inside this function
+ byte *stipple = nullptr;
+ assert(getRGBAt(color, r1, g1, b1, r2, g2, b2, stipple)); // TODO: move check inside this function
tglColor3ub(r1, g1, b1);
tglEnableClientState(TGL_VERTEX_ARRAY);
More information about the Scummvm-git-logs
mailing list