From 652c7e43e23652fb8bf05b4b57e6db36b0eb765c Mon Sep 17 00:00:00 2001
From: Nicolas Hake <isilkor@openclonk.org>
Date: Wed, 17 Jun 2015 21:30:56 +0200
Subject: [PATCH] Fix headless build

Several rendering changes have resulted in a non-rendering build that
failed to build from source. Dummy out all of these functions to make it
work again.

Cherry-picked.
Author:    Nicolas Hake <isilkor@openclonk.org>
Date:      Wed Jun 17 21:30:56 2015 +0200
Conflicts:
	src/lib/StdMesh.h
---
 src/graphics/C4DrawT.cpp                |  2 +-
 src/graphics/C4DrawT.h                  |  6 +++++-
 src/graphics/C4GraphicsResource.cpp     |  2 ++
 src/graphics/C4Shader.cpp               | 21 +++++++++++++++++--
 src/graphics/C4Shader.h                 | 37 +++++++++++++++++++++++++++++----
 src/landscape/fow/C4FoW.cpp             | 14 +++++++++++++
 src/landscape/fow/C4FoW.h               |  2 ++
 src/landscape/fow/C4FoWAmbient.cpp      | 13 ++++++++++--
 src/landscape/fow/C4FoWAmbient.h        |  2 ++
 src/landscape/fow/C4FoWBeam.cpp         |  6 +++++-
 src/landscape/fow/C4FoWBeam.h           |  5 ++++-
 src/landscape/fow/C4FoWDrawStrategy.cpp |  4 ++++
 src/landscape/fow/C4FoWDrawStrategy.h   |  4 ++++
 src/landscape/fow/C4FoWLight.cpp        |  5 +++++
 src/landscape/fow/C4FoWLight.h          |  6 +++++-
 src/landscape/fow/C4FoWLightSection.cpp |  5 +++++
 src/landscape/fow/C4FoWLightSection.h   |  6 +++++-
 src/landscape/fow/C4FoWRegion.cpp       | 12 +++++++++--
 src/landscape/fow/C4FoWRegion.h         |  5 ++++-
 src/lib/StdMesh.cpp                     | 35 +++++++++++++++++++++++++++++--
 src/lib/StdMesh.h                       |  6 +++++-
 src/lib/StdMeshMaterial.cpp             | 19 ++++++++++++++++-
 src/object/C4Def.cpp                    |  2 ++
 23 files changed, 198 insertions(+), 21 deletions(-)

diff --git a/src/graphics/C4DrawT.cpp b/src/graphics/C4DrawT.cpp
index 694dd98..69b93e4 100644
--- a/src/graphics/C4DrawT.cpp
+++ b/src/graphics/C4DrawT.cpp
@@ -22,7 +22,7 @@ CStdNoGfx::CStdNoGfx()
 	Default();
 }
 
-bool CStdNoGfx::CreatePrimarySurfaces(bool Fullscreen, unsigned int iXRes, unsigned int iYRes, int iColorDepth, unsigned int iMonitor)
+bool CStdNoGfx::CreatePrimarySurfaces(unsigned int iXRes, unsigned int iYRes, int iColorDepth, unsigned int iMonitor)
 {
 	Log("Graphics disabled.");
 	// Save back color depth
diff --git a/src/graphics/C4DrawT.h b/src/graphics/C4DrawT.h
index b7b7e97..519ba95 100644
--- a/src/graphics/C4DrawT.h
+++ b/src/graphics/C4DrawT.h
@@ -41,8 +41,12 @@ public:
 	virtual bool InvalidateDeviceObjects() { return true; }
 	virtual bool DeleteDeviceObjects() { return true; }
 	virtual bool DeviceReady() { return true; }
-	virtual bool CreatePrimarySurfaces(bool, unsigned int, unsigned int, int, unsigned int);
+	virtual bool CreatePrimarySurfaces(unsigned int, unsigned int, int, unsigned int);
 	virtual bool SetOutputAdapter(unsigned int) { return true; }
+
+	virtual void PerformMultiPix(C4Surface *, const C4BltVertex *, unsigned int) {}
+	virtual void PerformMultiLines(C4Surface *, const C4BltVertex *, unsigned int, float) {}
+	virtual void PerformMultiTris(C4Surface *, const C4BltVertex *, unsigned int, const C4BltTransform *, C4TexRef *, C4TexRef *, C4TexRef *, DWORD) {}
 };
 
 #endif
diff --git a/src/graphics/C4GraphicsResource.cpp b/src/graphics/C4GraphicsResource.cpp
index 774fd39..f55b22f 100644
--- a/src/graphics/C4GraphicsResource.cpp
+++ b/src/graphics/C4GraphicsResource.cpp
@@ -186,6 +186,7 @@ bool C4GraphicsResource::Init()
 		return false;
 	}
 
+#ifndef USE_CONSOLE
 	// Pre-load all shader files
 	Files.PreCacheEntries(C4CFN_ShaderFiles);
 	if (!pGL->InitShaders(&Files))
@@ -193,6 +194,7 @@ bool C4GraphicsResource::Init()
 		LogFatal(LoadResStr("IDS_ERR_GFX_INITSHADERS"));
 		return false;
 	}
+#endif
 
 	Game.SetInitProgress(11.0f);
 	ProgressStart = 12.0f; ProgressIncrement = 0.35f; // TODO: This should be changed so that it stops at 25%, no matter how many graphics we load.
diff --git a/src/graphics/C4Shader.cpp b/src/graphics/C4Shader.cpp
index 32de995..bec53b5 100644
--- a/src/graphics/C4Shader.cpp
+++ b/src/graphics/C4Shader.cpp
@@ -39,8 +39,10 @@ C4ShaderPosName C4SH_PosNames[] = {
 
 C4Shader::C4Shader()
 	: iTexCoords(0)
+#ifndef USE_CONSOLE
 	, hVert(0), hFrag(0), hProg(0)
 	, pUniforms(NULL)
+#endif
 {
 
 }
@@ -260,6 +262,7 @@ void C4Shader::AddVertexDefaults()
 	AddVertexSlice(C4Shader_Vertex_PositionPos, "gl_Position = ftransform();\n");
 }
 
+#ifndef USE_CONSOLE
 GLenum C4Shader::AddTexCoord(const char *szName)
 {
 	// Make sure we have enough space
@@ -275,6 +278,7 @@ GLenum C4Shader::AddTexCoord(const char *szName)
 
 	return GL_TEXTURE0 + iTexCoords++;
 }
+#endif
 
 void C4Shader::ClearSlices()
 {
@@ -285,6 +289,7 @@ void C4Shader::ClearSlices()
 
 void C4Shader::Clear()
 {
+#ifndef USE_CONSOLE
 	if (!hProg) return;
 	// Need to be detached, then deleted
 	glDetachObjectARB(hProg, hFrag);
@@ -296,11 +301,12 @@ void C4Shader::Clear()
 	// Clear uniform data
 	delete[] pUniforms; pUniforms = NULL;
 	iUniformCount = 0;
+#endif
 }
 
 bool C4Shader::Init(const char *szWhat, const char **szUniforms)
 {
-
+#ifndef USE_CONSOLE
 	// No support?
 	if(!GLEW_ARB_fragment_program)
 	{
@@ -310,6 +316,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms)
 
 	// Clear old shader first
 	if (hProg) Clear();
+#endif
 
 	// Dump
 	if (C4Shader::IsLogging())
@@ -320,6 +327,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms)
 		ShaderLog(Build(FragmentSlices, true).getData());
 	}
 
+#ifndef USE_CONSOLE
 	// Attempt to create shaders
 	StdStrBuf VertexShader = Build(VertexSlices),
 			  FragmentShader = Build(FragmentSlices);
@@ -363,6 +371,7 @@ bool C4Shader::Init(const char *szWhat, const char **szUniforms)
 	// because the respective uniforms got optimized out!
 	for (int i = 0; i < iUniformCount; i++)
 		pUniforms[i] = glGetUniformLocationARB(hProg, szUniforms[i]);
+#endif
 
 	return true;
 }
@@ -420,9 +429,13 @@ StdStrBuf C4Shader::Build(const ShaderSliceList &Slices, bool fDebug)
 	// At the start of the shader set the #version and number of
 	// available uniforms
 	StdStrBuf Buf;
+#ifndef USE_CONSOLE
 	GLint iMaxFrags = 0, iMaxVerts = 0;
 	glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB, &iMaxFrags);
 	glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB, &iMaxVerts);
+#else
+	int iMaxFrags = INT_MAX, iMaxVerts = INT_MAX;
+#endif
 	Buf.Format("#version %d\n"
 			   "#define MAX_FRAGMENT_UNIFORM_COMPONENTS %d\n"
 			   "#define MAX_VERTEX_UNIFORM_COMPONENTS %d\n",
@@ -468,6 +481,7 @@ StdStrBuf C4Shader::Build(const ShaderSliceList &Slices, bool fDebug)
 	return Buf;
 }
 
+#ifndef USE_CONSOLE
 GLhandleARB C4Shader::Create(GLenum iShaderType, const char *szWhat, const char *szShader)
 {
 	// Create shader
@@ -515,9 +529,11 @@ int C4Shader::GetObjectStatus(GLhandleARB hObj, GLenum type)
 	glGetObjectParameterivARB(hObj, type, &iStatus);
 	return iStatus;
 }
+#endif
 
 bool C4Shader::IsLogging() { return !!Application.isEditor; }
 
+#ifndef USE_CONSOLE
 GLint C4ShaderCall::AllocTexUnit(int iUniform, GLenum iType)
 {
 	// Want to bind uniform automatically? If not, the caller will take
@@ -550,7 +566,6 @@ void C4ShaderCall::Start()
 	// Activate shader
 	glUseProgramObjectARB(pShader->hProg);
 	fStarted = true;
-
 }
 
 void C4ShaderCall::Finish()
@@ -569,3 +584,5 @@ void C4ShaderCall::Finish()
 	iUnits = 0;
 	fStarted = false;
 }
+
+#endif
diff --git a/src/graphics/C4Shader.h b/src/graphics/C4Shader.h
index 53e38cc..c988d90 100644
--- a/src/graphics/C4Shader.h
+++ b/src/graphics/C4Shader.h
@@ -68,11 +68,13 @@ private:
 	// Used texture coordinates
 	int iTexCoords;
 
+#ifndef USE_CONSOLE
 	// shaders
 	GLhandleARB hVert, hFrag, hProg;
 	// shader variables
 	int iUniformCount;
 	GLint *pUniforms;
+#endif
 
 public:
 	enum VertexAttribIndex
@@ -93,15 +95,35 @@ public:
 		VAI_BoneIndicesMax = VAI_BoneIndices + VAI_BoneWeightsMax - VAI_BoneWeights
 	};
 
-	bool Initialised() const { return hVert != 0; }
+	bool Initialised() const
+	{
+#ifndef USE_CONSOLE
+		return hVert != 0;
+#else
+		return true;
+#endif
+	}
 
 	// Uniform getters
-	GLint GetUniform(int iUniform) const {
+#ifndef USE_CONSOLE
+	GLint GetUniform(int iUniform) const
+	{
 		return iUniform >= 0 && iUniform < iUniformCount ? pUniforms[iUniform] : -1;
 	}
-	bool HaveUniform(int iUniform) const {
+	bool HaveUniform(int iUniform) const
+	{
 		return GetUniform(iUniform) != GLint(-1);
 	}
+#else
+	int GetUniform(int iUniform) const
+	{
+		return -1;
+	}
+	bool HaveUniform(int iUniform) const
+	{
+		return false;
+	}
+#endif
 
 	// Shader is composed from various slices
 	void AddVertexSlice(int iPos, const char *szText);
@@ -113,10 +135,12 @@ public:
 	// Add default vertex code (2D - no transformation)
 	void AddVertexDefaults();
 
+#ifndef USE_CONSOLE
 	// Allocate a texture coordinate, returning its ID to be used with glMultiTexCoord.
 	// The texture coordinate will be visible to both shaders under the given name.
 	// Note that in contrast to uniforms, these will not disappear if not used!
 	GLenum AddTexCoord(const char *szName);
+#endif
 
 	// Assemble and link the shader. Should be called again after new slices are added.
 	bool Init(const char *szWhat, const char **szUniforms);
@@ -131,18 +155,22 @@ private:
 	int ParsePosition(const char *szWhat, const char **ppPos);
 
 	StdStrBuf Build(const ShaderSliceList &Slices, bool fDebug = false);
+
+#ifndef USE_CONSOLE
 	GLhandleARB Create(GLenum iShaderType, const char *szWhat, const char *szShader);
 	void DumpInfoLog(const char *szWhat, GLhandleARB hShader);
 	int GetObjectStatus(GLhandleARB hObj, GLenum type);
+#endif
 
 public:
 	static bool IsLogging();
 };
 
+#ifndef USE_CONSOLE
 class C4ShaderCall
 {
 public:
-	C4ShaderCall(const C4Shader *pShader) 
+	C4ShaderCall(const C4Shader *pShader)
 		: fStarted(false), pShader(pShader), iUnits(0)
 	{ }
 	~C4ShaderCall() { Finish(); }
@@ -210,5 +238,6 @@ public:
 	void Start();
 	void Finish();
 };
+#endif
 
 #endif // INC_C4Shader
diff --git a/src/landscape/fow/C4FoW.cpp b/src/landscape/fow/C4FoW.cpp
index 1dcddb6..be9019b 100644
--- a/src/landscape/fow/C4FoW.cpp
+++ b/src/landscape/fow/C4FoW.cpp
@@ -26,6 +26,7 @@ C4FoW::C4FoW()
 
 C4Shader *C4FoW::GetFramebufShader()
 {
+#ifndef USE_CONSOLE
 	// Not created yet?
 	if (!FramebufShader.Initialised())
 	{
@@ -46,10 +47,14 @@ C4Shader *C4FoW::GetFramebufShader()
 
 	}
 	return &FramebufShader;
+#else
+	return NULL;
+#endif
 }
 
 void C4FoW::Add(C4Object *pObj)
 {
+#ifndef USE_CONSOLE
 	// No view range? Probably want to remove instead
 	if(!pObj->lightRange && !pObj->lightFadeoutRange)
 	{
@@ -77,10 +82,12 @@ void C4FoW::Add(C4Object *pObj)
 		pLight->pNext = pLights;
 		pLights = pLight;
 	}
+#endif
 }
 
 void C4FoW::Remove(C4Object *pObj)
 {
+#ifndef USE_CONSOLE
 	// Look for matching light
 	C4FoWLight *pPrev = NULL, *pLight;
 	for (pLight = pLights; pLight; pPrev = pLight, pLight = pLight->getNext())
@@ -92,24 +99,31 @@ void C4FoW::Remove(C4Object *pObj)
 	// Remove
 	(pPrev ? pPrev->pNext : pLights) = pLight->getNext();
 	delete pLight;
+#endif
 }
 
 void C4FoW::Invalidate(C4Rect r)
 {
+#ifndef USE_CONSOLE
 	for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext())
 		pLight->Invalidate(r);
+#endif
 }
 
 void C4FoW::Update(C4Rect r, C4Player *pPlr)
 {
+#ifndef USE_CONSOLE
 	for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext())
 		if (pLight->IsVisibleForPlayer(pPlr))
 			pLight->Update(r);
+#endif
 }
 
 void C4FoW::Render(C4FoWRegion *pRegion, const C4TargetFacet *pOnScreen, C4Player *pPlr)
 {
+#ifndef USE_CONSOLE
 	for (C4FoWLight *pLight = pLights; pLight; pLight = pLight->getNext())
 		if (pLight->IsVisibleForPlayer(pPlr))
 			pLight->Render(pRegion, pOnScreen);
+#endif
 }
diff --git a/src/landscape/fow/C4FoW.h b/src/landscape/fow/C4FoW.h
index 4006f6e..59f110b 100644
--- a/src/landscape/fow/C4FoW.h
+++ b/src/landscape/fow/C4FoW.h
@@ -99,8 +99,10 @@ public:
 	void Render(class C4FoWRegion *pRegion, const C4TargetFacet *pOnScreen, C4Player *pPlr);
 
 private:
+#ifndef USE_CONSOLE
 	// Shader for updating the frame buffer
 	C4Shader FramebufShader;
+#endif
 };
 
 #endif // C4FOW_H
diff --git a/src/landscape/fow/C4FoWAmbient.cpp b/src/landscape/fow/C4FoWAmbient.cpp
index 6e0ec09..e257570 100644
--- a/src/landscape/fow/C4FoWAmbient.cpp
+++ b/src/landscape/fow/C4FoWAmbient.cpp
@@ -84,7 +84,10 @@ struct LightMapZoom {
 } // anonymous namespace
 
 C4FoWAmbient::C4FoWAmbient() :
-	Tex(0), Resolution(0.), Radius(0.), FullCoverage(0.),
+#ifndef USE_CONSOLE
+	Tex(0),
+#endif
+	Resolution(0.), Radius(0.), FullCoverage(0.),
 	SizeX(0), LandscapeX(0), SizeY(0), LandscapeY(0),
 	Brightness(1.)
 {
@@ -97,8 +100,10 @@ C4FoWAmbient::~C4FoWAmbient()
 
 void C4FoWAmbient::Clear()
 {
+#ifndef USE_CONSOLE
 	if(Tex != 0) glDeleteTextures(1, &Tex);
 	Tex = 0;
+#endif
 	Resolution = Radius = FullCoverage = 0.;
 	SizeX = SizeY = 0;
 	LandscapeX = LandscapeY = 0;
@@ -112,7 +117,7 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso
 	assert(full_coverage > 0 && full_coverage <= 1.);
 
 	// Clear old map
-	if(Tex != 0) Clear();
+	Clear();
 
 	Resolution = resolution;
 	Radius = radius;
@@ -124,6 +129,7 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso
 	SizeX = Min<unsigned int>(static_cast<unsigned int>(ceil(LandscapeX / resolution)), pDraw->MaxTexSize);
 	SizeY = Min<unsigned int>(static_cast<unsigned int>(ceil(LandscapeY / resolution)), pDraw->MaxTexSize);
 
+#ifndef USE_CONSOLE
 	glGenTextures(1, &Tex);
 	glBindTexture(GL_TEXTURE_2D, Tex);
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
@@ -136,10 +142,12 @@ void C4FoWAmbient::CreateFromLandscape(const C4Landscape& landscape, double reso
 	UpdateFromLandscape(landscape, C4Rect(0, 0, landscape.Width, landscape.Height));
 	uint32_t dt = C4TimeMilliseconds::Now() - begin;
 	LogF("Created %ux%u ambient map in %g secs", SizeX, SizeY, dt / 1000.);
+#endif
 }
 
 void C4FoWAmbient::UpdateFromLandscape(const C4Landscape& landscape, const C4Rect& update)
 {
+#ifndef USE_CONSOLE
 	// Nothing to do?
 	if(update.Wdt == 0 || update.Hgt == 0) return;
 
@@ -191,6 +199,7 @@ void C4FoWAmbient::UpdateFromLandscape(const C4Landscape& landscape, const C4Rec
 	glBindTexture(GL_TEXTURE_2D, Tex);
 	glTexSubImage2D(GL_TEXTURE_2D, 0, left, top, (right - left), (bottom - top), GL_RED, GL_FLOAT, ambient);
 	delete[] ambient;
+#endif
 }
 
 void C4FoWAmbient::GetFragTransform(const FLOAT_RECT& vpRect, const C4Rect& clipRect, const C4Rect& outRect, float ambientTransform[6]) const
diff --git a/src/landscape/fow/C4FoWAmbient.h b/src/landscape/fow/C4FoWAmbient.h
index ded91b9..d8ce833 100644
--- a/src/landscape/fow/C4FoWAmbient.h
+++ b/src/landscape/fow/C4FoWAmbient.h
@@ -28,7 +28,9 @@ public:
 	C4FoWAmbient();
 	~C4FoWAmbient();
 
+#ifndef USE_CONSOLE
 	GLuint Tex;
+#endif
 
 private:
 	// Parameters
diff --git a/src/landscape/fow/C4FoWBeam.cpp b/src/landscape/fow/C4FoWBeam.cpp
index a5736a0..e515d0c 100644
--- a/src/landscape/fow/C4FoWBeam.cpp
+++ b/src/landscape/fow/C4FoWBeam.cpp
@@ -14,6 +14,8 @@
  */
 
 #include "C4Include.h"
+
+#ifndef USE_CONSOLE
 #include "C4FoWBeam.h"
 
 // Maximum error allowed while merging beams.
@@ -48,7 +50,7 @@ bool C4FoWBeam::MergeRight(int32_t x, int32_t y)
 
 	// Calculate error. Note that simply summing up errors is not correct,
 	// strictly speaking (as new and old error surfaces might overlap). Still,
-	// this is quite elaborate already, no need to make it even more 
+	// this is quite elaborate already, no need to make it even more
 	int32_t iErr = getDoubleTriangleSurface(
 		getLeftEndX(), iLeftEndY,
 		getRightEndX(), iRightEndY,
@@ -193,3 +195,5 @@ void C4FoWBeam::CompileFunc(StdCompiler *pComp)
 	pComp->Value(mkNamingAdapt(iError, "iError"));
 	pComp->Value(mkNamingAdapt(fDirty, "fDirty"));
 }
+
+#endif
diff --git a/src/landscape/fow/C4FoWBeam.h b/src/landscape/fow/C4FoWBeam.h
index 7297fa9..531e7a4 100644
--- a/src/landscape/fow/C4FoWBeam.h
+++ b/src/landscape/fow/C4FoWBeam.h
@@ -16,6 +16,7 @@
 #ifndef C4FOWBEAM_H
 #define C4FOWBEAM_H
 
+#ifndef USE_CONSOLE
 #include "StdBuf.h"
 
 /** This class represents one beam. A beam is a triangle spanned by two rays: one going from the origin to the
@@ -133,4 +134,6 @@ public:
 
 };
 
-#endif // C4FOWBEAM
\ No newline at end of file
+#endif
+
+#endif // C4FOWBEAM
diff --git a/src/landscape/fow/C4FoWDrawStrategy.cpp b/src/landscape/fow/C4FoWDrawStrategy.cpp
index fc1fbd4..cc55c09 100644
--- a/src/landscape/fow/C4FoWDrawStrategy.cpp
+++ b/src/landscape/fow/C4FoWDrawStrategy.cpp
@@ -14,6 +14,9 @@
  */
 
 #include "C4Include.h"
+
+#ifndef USE_CONSOLE
+
 #include "C4FoWDrawStrategy.h"
 #include "C4FoWLight.h"
 #include "C4FoWRegion.h"
@@ -151,3 +154,4 @@ void C4FoWDrawWireframeStrategy::DrawLightVertex(float x, float y)
 	DrawVertex(x, y);
 }
 
+#endif
diff --git a/src/landscape/fow/C4FoWDrawStrategy.h b/src/landscape/fow/C4FoWDrawStrategy.h
index feb0512..4743c11 100644
--- a/src/landscape/fow/C4FoWDrawStrategy.h
+++ b/src/landscape/fow/C4FoWDrawStrategy.h
@@ -16,6 +16,8 @@
 #ifndef C4FOWDRAWSTRATEGY_H
 #define C4FOWDRAWSTRATEGY_H
 
+#ifndef USE_CONSOLE
+
 #include "C4DrawGL.h"
 #include <list>
 
@@ -122,3 +124,5 @@ private:
 };
 
 #endif
+
+#endif
diff --git a/src/landscape/fow/C4FoWLight.cpp b/src/landscape/fow/C4FoWLight.cpp
index 8becfea..4e35db9 100644
--- a/src/landscape/fow/C4FoWLight.cpp
+++ b/src/landscape/fow/C4FoWLight.cpp
@@ -14,6 +14,9 @@
  */
 
 #include "C4Include.h"
+
+#ifndef USE_CONSOLE
+
 #include "C4FoWLight.h"
 #include "C4FoWLightSection.h"
 #include "C4FoWBeamTriangle.h"
@@ -344,3 +347,5 @@ bool C4FoWLight::IsVisibleForPlayer(C4Player *player) const
 	if (!pObj || !player) return true;
 	return !::Hostile(pObj->Owner,player->Number);
 }
+
+#endif
diff --git a/src/landscape/fow/C4FoWLight.h b/src/landscape/fow/C4FoWLight.h
index 13ad58e..52f0457 100644
--- a/src/landscape/fow/C4FoWLight.h
+++ b/src/landscape/fow/C4FoWLight.h
@@ -15,6 +15,8 @@
 #ifndef C4FOWLIGHT_H
 #define C4FOWLIGHT_H
 
+#ifndef USE_CONSOLE
+
 #include "C4Object.h"
 #include "C4Surface.h"
 #include "C4FacetEx.h"
@@ -95,4 +97,6 @@ private:
 
 };
 
-#endif
\ No newline at end of file
+#endif
+
+#endif
diff --git a/src/landscape/fow/C4FoWLightSection.cpp b/src/landscape/fow/C4FoWLightSection.cpp
index 0ef4d77..30009a6 100644
--- a/src/landscape/fow/C4FoWLightSection.cpp
+++ b/src/landscape/fow/C4FoWLightSection.cpp
@@ -14,6 +14,9 @@
  */
 
 #include "C4Include.h"
+
+#ifndef USE_CONSOLE
+
 #include "C4FoWLightSection.h"
 #include "C4FoWBeamTriangle.h"
 #include "C4FoWBeam.h"
@@ -856,3 +859,5 @@ void C4FoWLightSection::CompileFunc(StdCompiler *pComp)
 		}
 	}
 }
+
+#endif
diff --git a/src/landscape/fow/C4FoWLightSection.h b/src/landscape/fow/C4FoWLightSection.h
index cde356a..edecd34 100644
--- a/src/landscape/fow/C4FoWLightSection.h
+++ b/src/landscape/fow/C4FoWLightSection.h
@@ -16,6 +16,8 @@
 #ifndef C4FOWLIGHTSECTION_H
 #define C4FOWLIGHTSECTION_H
 
+#ifndef USE_CONSOLE
+
 #include "C4Rect.h"
 #include <list>
 
@@ -134,4 +136,6 @@ public:
 
 };
 
-#endif
\ No newline at end of file
+#endif
+
+#endif
diff --git a/src/landscape/fow/C4FoWRegion.cpp b/src/landscape/fow/C4FoWRegion.cpp
index 5e107a7..1df661e 100644
--- a/src/landscape/fow/C4FoWRegion.cpp
+++ b/src/landscape/fow/C4FoWRegion.cpp
@@ -16,6 +16,7 @@
 #include "C4Include.h"
 #include "C4FoWRegion.h"
 
+#ifndef USE_CONSOLE
 bool glCheck() {
 	if (int err = glGetError()) {
 		LogF("GL error %d: %s", err, gluErrorString(err));
@@ -23,6 +24,7 @@ bool glCheck() {
 	}
 	return true;
 }
+#endif
 
 C4FoWRegion::~C4FoWRegion()
 {
@@ -31,7 +33,7 @@ C4FoWRegion::~C4FoWRegion()
 
 bool C4FoWRegion::BindFramebuf()
 {
-
+#ifndef USE_CONSOLE
 	// Flip texture
 	C4Surface *pSfc = pSurface;
 	pSurface = pBackSurface;
@@ -79,6 +81,7 @@ bool C4FoWRegion::BindFramebuf()
 		glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
 		return false;
 	}
+#endif
 
 	// Worked!
 	return true;
@@ -86,11 +89,13 @@ bool C4FoWRegion::BindFramebuf()
 
 void C4FoWRegion::Clear()
 {
+#ifndef USE_CONSOLE
 	if (hFrameBufDraw) {
 		glDeleteFramebuffersEXT(1, &hFrameBufDraw);
 		glDeleteFramebuffersEXT(1, &hFrameBufRead);
 	}
 	hFrameBufDraw = hFrameBufRead = 0;
+#endif
 	delete pSurface; pSurface = NULL;
 	delete pBackSurface; pBackSurface = NULL;
 }
@@ -104,6 +109,7 @@ void C4FoWRegion::Update(C4Rect r, const FLOAT_RECT& vp)
 
 void C4FoWRegion::Render(const C4TargetFacet *pOnScreen)
 {
+#ifndef USE_CONSOLE
 	// Update FoW at interesting location
 	pFoW->Update(Region, pPlayer);
 
@@ -199,7 +205,7 @@ void C4FoWRegion::Render(const C4TargetFacet *pOnScreen)
 	glCheck();
 
 	OldRegion = Region;
-
+#endif
 }
 
 void C4FoWRegion::GetFragTransform(const C4Rect& clipRect, const C4Rect& outRect, float lightTransform[6]) const
@@ -229,7 +235,9 @@ void C4FoWRegion::GetFragTransform(const C4Rect& clipRect, const C4Rect& outRect
 C4FoWRegion::C4FoWRegion(C4FoW *pFoW, C4Player *pPlayer)
 	: pFoW(pFoW)
 	, pPlayer(pPlayer)
+#ifndef USE_CONSOLE
 	, hFrameBufDraw(0), hFrameBufRead(0)
+#endif
 	, Region(0,0,0,0), OldRegion(0,0,0,0)
 	, pSurface(NULL), pBackSurface(NULL)
 {
diff --git a/src/landscape/fow/C4FoWRegion.h b/src/landscape/fow/C4FoWRegion.h
index 20e33a6..a264e4b 100644
--- a/src/landscape/fow/C4FoWRegion.h
+++ b/src/landscape/fow/C4FoWRegion.h
@@ -31,10 +31,13 @@ public:
 private:
 	C4FoW *pFoW;
 	C4Player *pPlayer;
+	C4Surface *pSurface, *pBackSurface;
 	C4Rect Region, OldRegion;
 	FLOAT_RECT ViewportRegion; // Region covered by visible viewport
-	C4Surface *pSurface, *pBackSurface;
+
+#ifndef USE_CONSOLE
 	GLuint hFrameBufDraw, hFrameBufRead;
+#endif
 
 public:
 	const C4FoW* getFoW() const { return pFoW; }
diff --git a/src/lib/StdMesh.cpp b/src/lib/StdMesh.cpp
index 6c1905d..9930097 100644
--- a/src/lib/StdMesh.cpp
+++ b/src/lib/StdMesh.cpp
@@ -534,7 +534,11 @@ StdSubMesh::StdSubMesh() :
 {
 }
 
-StdMesh::StdMesh() : Skeleton(new StdMeshSkeleton), vbo(0)
+StdMesh::StdMesh() :
+	Skeleton(new StdMeshSkeleton)
+#ifndef USE_CONSOLE
+	, vbo(0)
+#endif
 {
 	BoundingBox.x1 = BoundingBox.y1 = BoundingBox.z1 = 0.0f;
 	BoundingBox.x2 = BoundingBox.y2 = BoundingBox.z2 = 0.0f;
@@ -543,17 +547,22 @@ StdMesh::StdMesh() : Skeleton(new StdMeshSkeleton), vbo(0)
 
 StdMesh::~StdMesh()
 {
+#ifndef USE_CONSOLE
 	if (vbo)
 		glDeleteBuffers(1, &vbo);
+#endif
 }
 
 void StdMesh::PostInit()
 {
+#ifndef USE_CONSOLE
 	// Order submeshes so that opaque submeshes come before non-opaque ones
 	std::sort(SubMeshes.begin(), SubMeshes.end(), StdMeshSubMeshVisibilityCmpPred());
 	UpdateVBO();
+#endif
 }
 
+#ifndef USE_CONSOLE
 void StdMesh::UpdateVBO()
 {
 	// We're only uploading vertices once, so there shouldn't be a VBO so far
@@ -603,18 +612,21 @@ void StdMesh::UpdateVBO()
 	// Unbind the buffer so following rendering calls do not use it
 	glBindBuffer(GL_ARRAY_BUFFER, 0);
 }
-
+#endif
 
 StdSubMeshInstance::StdSubMeshInstance(StdMeshInstance& instance, const StdSubMesh& submesh, float completion):
 	base(&submesh), Material(NULL), CurrentFaceOrdering(FO_Fixed)
 {
+#ifndef USE_CONSOLE
 	LoadFacesForCompletion(instance, submesh, completion);
+#endif
 
 	SetMaterial(submesh.GetMaterial());
 }
 
 void StdSubMeshInstance::LoadFacesForCompletion(StdMeshInstance& instance, const StdSubMesh& submesh, float completion)
 {
+#ifndef USE_CONSOLE
 	// First: Copy all faces
 	Faces.resize(submesh.GetNumFaces());
 	for (unsigned int i = 0; i < submesh.GetNumFaces(); ++i)
@@ -637,12 +649,14 @@ void StdSubMeshInstance::LoadFacesForCompletion(StdMeshInstance& instance, const
 		assert(submesh.GetNumFaces() >= 1);
 		Faces.resize(Clamp<unsigned int>(static_cast<unsigned int>(completion * submesh.GetNumFaces() + 0.5), 1, submesh.GetNumFaces()));
 	}
+#endif
 }
 
 void StdSubMeshInstance::SetMaterial(const StdMeshMaterial& material)
 {
 	Material = &material;
 
+#ifndef USE_CONSOLE
 	// Setup initial texture animation data
 	assert(Material->BestTechniqueIndex >= 0);
 	const StdMeshMaterialTechnique& technique = Material->Techniques[Material->BestTechniqueIndex];
@@ -664,10 +678,12 @@ void StdSubMeshInstance::SetMaterial(const StdMeshMaterial& material)
 	}
 
 	// TODO: Reset face ordering
+#endif
 }
 
 void StdSubMeshInstance::SetFaceOrdering(const StdSubMesh& submesh, FaceOrdering ordering)
 {
+#ifndef USE_CONSOLE
 	if (CurrentFaceOrdering != ordering)
 	{
 		CurrentFaceOrdering = ordering;
@@ -677,10 +693,12 @@ void StdSubMeshInstance::SetFaceOrdering(const StdSubMesh& submesh, FaceOrdering
 				Faces[i] = submesh.GetFace(i);
 		}
 	}
+#endif
 }
 
 void StdSubMeshInstance::SetFaceOrderingForClrModulation(const StdSubMesh& submesh, uint32_t clrmod)
 {
+#ifndef USE_CONSOLE
 	bool opaque = Material->IsOpaque();
 
 	if(!opaque)
@@ -689,6 +707,7 @@ void StdSubMeshInstance::SetFaceOrderingForClrModulation(const StdSubMesh& subme
 		SetFaceOrdering(submesh, FO_NearestToFarthest);
 	else
 		SetFaceOrdering(submesh, FO_Fixed);
+#endif
 }
 
 void StdSubMeshInstance::CompileFunc(StdCompiler* pComp)
@@ -1050,6 +1069,7 @@ StdMeshInstance::~StdMeshInstance()
 
 void StdMeshInstance::SetFaceOrdering(FaceOrdering ordering)
 {
+#ifndef USE_CONSOLE
 	for (unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i)
 		SubMeshInstances[i]->SetFaceOrdering(Mesh->GetSubMesh(i), ordering);
 
@@ -1058,10 +1078,12 @@ void StdMeshInstance::SetFaceOrdering(FaceOrdering ordering)
 	for (AttachedMeshIter iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter)
 		if ((*iter)->OwnChild)
 			(*iter)->Child->SetFaceOrdering(ordering);
+#endif
 }
 
 void StdMeshInstance::SetFaceOrderingForClrModulation(uint32_t clrmod)
 {
+#ifndef USE_CONSOLE
 	for (unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i)
 		SubMeshInstances[i]->SetFaceOrderingForClrModulation(Mesh->GetSubMesh(i), clrmod);
 
@@ -1070,16 +1092,19 @@ void StdMeshInstance::SetFaceOrderingForClrModulation(uint32_t clrmod)
 	for (AttachedMeshIter iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter)
 		if ((*iter)->OwnChild)
 			(*iter)->Child->SetFaceOrderingForClrModulation(clrmod);
+#endif
 }
 
 void StdMeshInstance::SetCompletion(float completion)
 {
 	Completion = completion;
 
+#ifndef USE_CONSOLE
 	// TODO: Load all submesh faces and then determine the ones to use from the
 	// full pool.
 	for(unsigned int i = 0; i < Mesh->GetNumSubMeshes(); ++i)
 		SubMeshInstances[i]->LoadFacesForCompletion(*this, Mesh->GetSubMesh(i), completion);
+#endif
 }
 
 StdMeshInstance::AnimationNode* StdMeshInstance::PlayAnimation(const StdStrBuf& animation_name, int slot, AnimationNode* sibling, ValueProvider* position, ValueProvider* weight)
@@ -1210,6 +1235,7 @@ void StdMeshInstance::ExecuteAnimation(float dt)
 		if(!ExecuteAnimationNode(AnimationStack[i-1]))
 			StopAnimation(AnimationStack[i-1]);
 
+#ifndef USE_CONSOLE
 	// Update animated textures
 	for (unsigned int i = 0; i < SubMeshInstances.size(); ++i)
 	{
@@ -1240,6 +1266,7 @@ void StdMeshInstance::ExecuteAnimation(float dt)
 			}
 		}
 	}
+#endif
 
 	// Update animation for attached meshes
 	for (AttachedMeshList::iterator iter = AttachChildren.begin(); iter != AttachChildren.end(); ++iter)
@@ -1321,7 +1348,9 @@ void StdMeshInstance::SetMaterial(size_t i, const StdMeshMaterial& material)
 {
 	assert(i < SubMeshInstances.size());
 	SubMeshInstances[i]->SetMaterial(material);
+#ifndef USE_CONSOLE
 	std::stable_sort(SubMeshInstancesOrdered.begin(), SubMeshInstancesOrdered.end(), StdMeshSubMeshInstanceVisibilityCmpPred());
+#endif
 }
 
 const StdMeshMatrix& StdMeshInstance::GetBoneTransform(size_t i) const
@@ -1433,6 +1462,7 @@ bool StdMeshInstance::UpdateBoneTransforms()
 
 void StdMeshInstance::ReorderFaces(StdMeshMatrix* global_trans)
 {
+#ifndef USE_CONSOLE
 	for (unsigned int i = 0; i < SubMeshInstances.size(); ++i)
 	{
 		StdSubMeshInstance& inst = *SubMeshInstances[i];
@@ -1450,6 +1480,7 @@ void StdMeshInstance::ReorderFaces(StdMeshMatrix* global_trans)
 	}
 
 	// TODO: Also reorder submeshes, attached meshes and include AttachTransformation for attached meshes...
+#endif
 }
 
 void StdMeshInstance::CompileFunc(StdCompiler* pComp, AttachedMesh::DenumeratorFactoryFunc Factory)
diff --git a/src/lib/StdMesh.h b/src/lib/StdMesh.h
index 7007a74..a5ae5f3 100644
--- a/src/lib/StdMesh.h
+++ b/src/lib/StdMesh.h
@@ -197,11 +197,15 @@ public:
 
 	void PostInit();
 
-	const GLuint GetVBO() const { return vbo; }
+#ifndef USE_CONSOLE
+	GLuint GetVBO() const { return vbo; }
+#endif
 
 private:
+#ifndef USE_CONSOLE
 	GLuint vbo;
 	void UpdateVBO();
+#endif
 
 	StdMesh(const StdMesh& other); // non-copyable
 	StdMesh& operator=(const StdMesh& other); // non-assignable
diff --git a/src/lib/StdMeshMaterial.cpp b/src/lib/StdMeshMaterial.cpp
index cb601a5..f1f65ce 100644
--- a/src/lib/StdMeshMaterial.cpp
+++ b/src/lib/StdMeshMaterial.cpp
@@ -849,7 +849,9 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad
 	shader.AddVertexSlices(VertexShader->GetFilename(), VertexShader->GetCode(), VertexShader->GetFilename());
 	shader.AddFragmentSlices(FragmentShader->GetFilename(), FragmentShader->GetCode(), FragmentShader->GetFilename());
 	// Construct the list of uniforms
-	std::vector<const char*> uniformNames(C4SSU_Count + ParameterNames.size() + 1);
+	std::vector<const char*> uniformNames;
+#ifndef USE_CONSOLE
+	uniformNames.resize(C4SSU_Count + ParameterNames.size() + 1);
 	uniformNames[C4SSU_ClrMod] = "clrMod";
 	uniformNames[C4SSU_BaseTex] = "baseTex"; // unused
 	uniformNames[C4SSU_OverlayTex] = "overlayTex"; // unused
@@ -864,25 +866,31 @@ bool StdMeshMaterialProgram::CompileShader(StdMeshMaterialLoader& loader, C4Shad
 	for (unsigned int i = 0; i < ParameterNames.size(); ++i)
 		uniformNames[C4SSU_Count + i] = ParameterNames[i].getData();
 	uniformNames[C4SSU_Count + ParameterNames.size()] = NULL;
+#endif
 	// Compile the shader
 	StdCopyStrBuf name(Name);
+#ifndef USE_CONSOLE
 	if (ssc != 0) name.Append(":");
 	if (ssc & C4SSC_LIGHT) name.Append("Light");
 	if (ssc & C4SSC_MOD2) name.Append("Mod2");
+#endif
 	return shader.Init(name.getData(), &uniformNames[0]);
 }
 
 bool StdMeshMaterialProgram::Compile(StdMeshMaterialLoader& loader)
 {
+#ifndef USE_CONSOLE
 	if (!CompileShader(loader, Shader, 0)) return false;
 	if (!CompileShader(loader, ShaderMod2, C4SSC_MOD2)) return false;
 	if (!CompileShader(loader, ShaderLight, C4SSC_LIGHT)) return false;
 	if (!CompileShader(loader, ShaderLightMod2, C4SSC_LIGHT | C4SSC_MOD2)) return false;
+#endif
 	return true;
 }
 
 const C4Shader* StdMeshMaterialProgram::GetShader(int ssc) const
 {
+#ifndef USE_CONSOLE
 	const C4Shader* shaders[4] = {
 		&Shader,
 		&ShaderMod2,
@@ -896,13 +904,20 @@ const C4Shader* StdMeshMaterialProgram::GetShader(int ssc) const
 
 	assert(index < 4);
 	return shaders[index];
+#else
+	return NULL;
+#endif
 }
 
 int StdMeshMaterialProgram::GetParameterIndex(const char* name) const
 {
+#ifndef USE_CONSOLE
 	std::vector<StdCopyStrBuf>::const_iterator iter = std::find(ParameterNames.begin(), ParameterNames.end(), name);
 	if(iter == ParameterNames.end()) return -1;
 	return C4SSU_Count + std::distance(ParameterNames.begin(), iter);
+#else
+	return -1;
+#endif
 }
 
 double StdMeshMaterialTextureUnit::Transformation::GetWaveXForm(double t) const
@@ -1515,12 +1530,14 @@ void StdMeshMatManager::Parse(const char* mat_script, const char* filename, StdM
 
 			Materials[material_name] = mat;
 
+#ifndef USE_CONSOLE
 			// To Gfxspecific setup of the material; choose working techniques
 			if (!pDraw->PrepareMaterial(*this, loader, Materials[material_name]))
 			{
 				Materials.erase(material_name);
 				ctx.Error(StdCopyStrBuf("No working technique for material '") + material_name + "'");
 			}
+#endif
 		}
 		else if (token_name == "vertex_program")
 		{
diff --git a/src/object/C4Def.cpp b/src/object/C4Def.cpp
index 5d8442e..81a0e36 100644
--- a/src/object/C4Def.cpp
+++ b/src/object/C4Def.cpp
@@ -59,6 +59,7 @@ public:
 
 	virtual void AddShaderSlices(C4Shader& shader, int ssc)
 	{
+#ifndef USE_CONSOLE
 		// Add mesh-independent slices
 		shader.AddFragmentSlice(-1, "#define OPENCLONK");
 		shader.AddVertexSlice(-1, "#define OPENCLONK");
@@ -80,6 +81,7 @@ public:
 
 		if (ssc & C4SSC_BASE) shader.LoadSlices(&::GraphicsResource.Files, "SpriteTextureShader.glsl");
 		if (ssc & C4SSC_OVERLAY) shader.LoadSlices(&::GraphicsResource.Files, "SpriteOverlayShader.glsl");
+#endif
 	}
 
 private:
-- 
2.1.4

