Fix build on macppc by using ports-gcc instead of ports-clang.

Fix colors for big endian archs, modified from a diff from George Koehler
<kernigh () gmail ! com>, with additional input from naddy@ (thanks!).
OK bcallah@ (MAINTAINER) naddy@
This commit is contained in:
cwen 2019-01-17 00:14:58 +00:00
parent a257dcc288
commit cf718ea3bf
3 changed files with 53 additions and 2 deletions

View File

@ -1,7 +1,8 @@
# $OpenBSD: Makefile,v 1.8 2018/11/21 01:58:38 bcallah Exp $
# $OpenBSD: Makefile,v 1.9 2019/01/17 00:14:58 cwen Exp $
COMMENT = roguelike game in a non-Euclidean world
CATEGORIES = games x11
REVISION = 0
GH_ACCOUNT = zenorogue
GH_PROJECT = hyperrogue
@ -17,7 +18,7 @@ WANTLIB += ${COMPILER_LIBCXX} GL GLEW SDL SDL_gfx SDL_mixer SDL_ttf
WANTLIB += c m png
# C++11
COMPILER = base-clang ports-clang ports-gcc
COMPILER = base-clang ports-gcc
BUILD_DEPENDS = ${MODGNU_AUTOCONF_DEPENDS} \
${MODGNU_AUTOMAKE_DEPENDS}

View File

@ -0,0 +1,20 @@
$OpenBSD: patch-polygons_cpp,v 1.1 2019/01/17 00:14:58 cwen Exp $
Fix colors on big-endian machines in non-OpenGL mode.
See https://github.com/zenorogue/hyperrogue/pull/70
Index: polygons.cpp
--- polygons.cpp.orig
+++ polygons.cpp
@@ -762,7 +762,12 @@ void fixMercator(bool tinf) {
}
unsigned char& part(color_t& col, int i) {
- unsigned char* c = (unsigned char*) &col; return c[i];
+ unsigned char* c = (unsigned char*) &col;
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ return c[sizeof(col) - 1 - i];
+#else
+ return c[i];
+#endif
}
bool in_twopoint = false;

View File

@ -0,0 +1,30 @@
$OpenBSD: patch-shaders_cpp,v 1.1 2019/01/17 00:14:58 cwen Exp $
Fix colors for big endian archs in OpenGL mode.
See https://github.com/zenorogue/hyperrogue/pull/70
Index: shaders.cpp
--- shaders.cpp.orig
+++ shaders.cpp
@@ -339,9 +339,9 @@ void id_modelview() {
#endif
void color2(color_t color, ld part) {
- unsigned char *c = (unsigned char*) (&color);
GLfloat cols[4];
- for(int i=0; i<4; i++) cols[i] = c[3-i] / 255.0 * part;
+ for(int i=0; i<4; i++)
+ cols[i] = (color >> ((3-i) * 8) & 0xff) / 255.0 * part;
#if CAP_SHADER
// glUniform4fv(current->uFog, 4, cols);
glUniform4f(current->uColor, cols[0], cols[1], cols[2], cols[3]);
@@ -352,7 +352,11 @@ void color2(color_t color, ld part) {
void colorClear(color_t color) {
unsigned char *c = (unsigned char*) (&color);
+#if SDL_BYTEORDER == SDL_BIG_ENDIAN
+ glClearColor(c[0] / 255.0, c[1] / 255.0, c[2]/255.0, c[3] / 255.0);
+#else
glClearColor(c[3] / 255.0, c[2] / 255.0, c[1]/255.0, c[0] / 255.0);
+#endif
}
void be_nontextured(shader_projection sp) { switch_mode(gmColored, sp); }