Moved platform-independent OpenGL setup code into GameController instead of duplicating it. Enabled GL_SEPARATE_SPECULAR_COLOR, making specular highlights reasonably consistent between default shader and non-shader mode.
git-svn-id: http://svn.berlios.de/svnroot/repos/oolite-linux/trunk@3172 127b21dd-08f5-0310-b4b7-95ae10353056
This commit is contained in:
parent
731fae187f
commit
f1e5e1d19a
@ -223,12 +223,6 @@ static NSString * kOOLogKeyDown = @"input.keyMapping.keyPress.keyDown";
|
|||||||
|
|
||||||
- (void) initialiseGLWithSize:(NSSize) v_size
|
- (void) initialiseGLWithSize:(NSSize) v_size
|
||||||
{
|
{
|
||||||
GLfloat sun_ambient[] = {0.0, 0.0, 0.0, 1.0};
|
|
||||||
GLfloat sun_diffuse[] = {1.0, 1.0, 1.0, 1.0};
|
|
||||||
GLfloat sun_specular[] = {1.0, 1.0, 1.0, 1.0};
|
|
||||||
GLfloat sun_center_position[] = {0.0, 0.0, 0.0, 1.0};
|
|
||||||
GLfloat stars_ambient[] = {0.25, 0.2, 0.25, 1.0};
|
|
||||||
|
|
||||||
viewSize = v_size;
|
viewSize = v_size;
|
||||||
if (viewSize.width/viewSize.height > 4.0/3.0) {
|
if (viewSize.width/viewSize.height > 4.0/3.0) {
|
||||||
display_z = 480.0 * viewSize.width/viewSize.height;
|
display_z = 480.0 * viewSize.width/viewSize.height;
|
||||||
@ -240,59 +234,10 @@ static NSString * kOOLogKeyDown = @"input.keyMapping.keyPress.keyDown";
|
|||||||
y_offset = 320.0 * viewSize.height/viewSize.width;
|
y_offset = 320.0 * viewSize.height/viewSize.width;
|
||||||
}
|
}
|
||||||
|
|
||||||
float ratio = 0.5;
|
[self openGLContext];
|
||||||
float aspect = viewSize.height/viewSize.width;
|
[[self gameController] setUpBasicOpenGLStateWithSize:viewSize];
|
||||||
|
|
||||||
glShadeModel(GL_FLAT);
|
|
||||||
glClearColor(0.0, 0.0, 0.0, 0.0);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
[[self openGLContext] flushBuffer];
|
[[self openGLContext] flushBuffer];
|
||||||
|
|
||||||
glClearDepth(MAX_CLEAR_DEPTH);
|
|
||||||
glViewport( 0, 0, viewSize.width, viewSize.height);
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadIdentity(); // reset matrix
|
|
||||||
glFrustum( -ratio, ratio, -aspect*ratio, aspect*ratio, 1.0, MAX_CLEAR_DEPTH); // set projection matrix
|
|
||||||
|
|
||||||
glMatrixMode( GL_MODELVIEW);
|
|
||||||
|
|
||||||
glEnable( GL_DEPTH_TEST); // depth buffer
|
|
||||||
glDepthFunc( GL_LESS); // depth buffer
|
|
||||||
|
|
||||||
glFrontFace( GL_CCW); // face culling - front faces are AntiClockwise!
|
|
||||||
glCullFace( GL_BACK); // face culling
|
|
||||||
glEnable( GL_CULL_FACE); // face culling
|
|
||||||
|
|
||||||
glEnable( GL_BLEND); // alpha blending
|
|
||||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha blending
|
|
||||||
|
|
||||||
if (UNIVERSE)
|
|
||||||
{
|
|
||||||
[UNIVERSE setLighting];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
glLightfv(GL_LIGHT1, GL_AMBIENT, sun_ambient);
|
|
||||||
glLightfv(GL_LIGHT1, GL_SPECULAR, sun_specular);
|
|
||||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, sun_diffuse);
|
|
||||||
glLightfv(GL_LIGHT1, GL_POSITION, sun_center_position);
|
|
||||||
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, stars_ambient);
|
|
||||||
|
|
||||||
glEnable(GL_LIGHT1); // lighting
|
|
||||||
|
|
||||||
}
|
|
||||||
glEnable(GL_LIGHTING); // lighting
|
|
||||||
|
|
||||||
|
|
||||||
// world's simplest OpenGL optimisations...
|
|
||||||
#if GL_APPLE_transform_hint
|
|
||||||
glHint(GL_TRANSFORM_HINT_APPLE, GL_FASTEST);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
glDisable(GL_NORMALIZE);
|
|
||||||
glDisable(GL_RESCALE_NORMAL);
|
|
||||||
|
|
||||||
m_glContextInitialized = YES;
|
m_glContextInitialized = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,5 +162,6 @@ MA 02110-1301, USA.
|
|||||||
|
|
||||||
- (void)windowDidResize:(NSNotification *)aNotification;
|
- (void)windowDidResize:(NSNotification *)aNotification;
|
||||||
|
|
||||||
@end
|
- (void)setUpBasicOpenGLStateWithSize:(NSSize)viewSize;
|
||||||
|
|
||||||
|
@end
|
||||||
|
@ -1046,6 +1046,72 @@ static NSComparisonResult CompareDisplayModes(id arg1, id arg2, void *context)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
- (void)setUpBasicOpenGLStateWithSize:(NSSize)viewSize
|
||||||
|
{
|
||||||
|
float ratio = 0.5;
|
||||||
|
float aspect = viewSize.height/viewSize.width;
|
||||||
|
|
||||||
|
glClearColor(0.0, 0.0, 0.0, 0.0);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
glShadeModel(GL_FLAT);
|
||||||
|
|
||||||
|
glClearDepth(MAX_CLEAR_DEPTH);
|
||||||
|
glViewport(0, 0, viewSize.width, viewSize.height);
|
||||||
|
|
||||||
|
glMatrixMode(GL_PROJECTION);
|
||||||
|
glLoadIdentity(); // reset matrix
|
||||||
|
glFrustum(-ratio, ratio, -aspect*ratio, aspect*ratio, 1.0, MAX_CLEAR_DEPTH); // set projection matrix
|
||||||
|
|
||||||
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST); // depth buffer
|
||||||
|
glDepthFunc(GL_LESS); // depth buffer
|
||||||
|
|
||||||
|
glFrontFace(GL_CCW); // face culling - front faces are AntiClockwise!
|
||||||
|
glCullFace(GL_BACK); // face culling
|
||||||
|
glEnable(GL_CULL_FACE); // face culling
|
||||||
|
|
||||||
|
glEnable(GL_BLEND); // alpha blending
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha blending
|
||||||
|
|
||||||
|
if (UNIVERSE)
|
||||||
|
{
|
||||||
|
[UNIVERSE setLighting];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GLfloat black[4] = {0.0, 0.0, 0.0, 1.0};
|
||||||
|
GLfloat white[] = {1.0, 1.0, 1.0, 1.0};
|
||||||
|
GLfloat stars_ambient[] = {0.25, 0.2, 0.25, 1.0};
|
||||||
|
|
||||||
|
glLightfv(GL_LIGHT1, GL_AMBIENT, black);
|
||||||
|
glLightfv(GL_LIGHT1, GL_SPECULAR, white);
|
||||||
|
glLightfv(GL_LIGHT1, GL_DIFFUSE, white);
|
||||||
|
glLightfv(GL_LIGHT1, GL_POSITION, black);
|
||||||
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, stars_ambient);
|
||||||
|
|
||||||
|
glEnable(GL_LIGHT1); // lighting
|
||||||
|
|
||||||
|
}
|
||||||
|
glEnable(GL_LIGHTING); // lighting
|
||||||
|
|
||||||
|
|
||||||
|
// world's simplest OpenGL optimisations...
|
||||||
|
#if GL_APPLE_transform_hint
|
||||||
|
glHint(GL_TRANSFORM_HINT_APPLE, GL_FASTEST);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
glDisable(GL_NORMALIZE);
|
||||||
|
glDisable(GL_RESCALE_NORMAL);
|
||||||
|
|
||||||
|
#if GL_VERSION_1_2
|
||||||
|
// For OpenGL 1.2 or later, we want GL_SEPARATE_SPECULAR_COLOR all the time.
|
||||||
|
if ([[OOOpenGLExtensionManager sharedManager] majorVersionNumber] > 1 || [[OOOpenGLExtensionManager sharedManager] minorVersionNumber] >= 2)
|
||||||
|
{
|
||||||
|
glLightModeli(GL_LIGHT_MODEL_COLOR_CONTROL, GL_SEPARATE_SPECULAR_COLOR);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ This is thread safe, except for initialization; that is, +sharedManager should
|
|||||||
be called from the main thread at an early point. The OpenGL context must be
|
be called from the main thread at an early point. The OpenGL context must be
|
||||||
set up by then.
|
set up by then.
|
||||||
|
|
||||||
|
|
||||||
Oolite
|
Oolite
|
||||||
Copyright (C) 2004-2008 Giles C Williams and contributors
|
Copyright (C) 2004-2008 Giles C Williams and contributors
|
||||||
|
|
||||||
|
@ -766,64 +766,14 @@ if (!showSplashScreen) return;
|
|||||||
float ratio = 0.5;
|
float ratio = 0.5;
|
||||||
float aspect = bounds.size.height/bounds.size.width;
|
float aspect = bounds.size.height/bounds.size.width;
|
||||||
|
|
||||||
if (surface != 0)
|
if (surface != 0) SDL_FreeSurface(surface);
|
||||||
SDL_FreeSurface(surface);
|
|
||||||
|
|
||||||
[self autoShowMouse];
|
[self autoShowMouse];
|
||||||
|
|
||||||
glShadeModel(GL_FLAT);
|
[[self gameController] setUpBasicOpenGLStateWithSize:viewSize];
|
||||||
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
|
|
||||||
glClearDepth(MAX_CLEAR_DEPTH);
|
|
||||||
glViewport( 0, 0, bounds.size.width, bounds.size.height);
|
|
||||||
|
|
||||||
squareX = 0.0f;
|
squareX = 0.0f;
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadIdentity(); // reset matrix
|
|
||||||
glFrustum( -ratio, ratio, -aspect*ratio, aspect*ratio, 1.0, MAX_CLEAR_DEPTH); // set projection matrix
|
|
||||||
|
|
||||||
glMatrixMode( GL_MODELVIEW);
|
|
||||||
|
|
||||||
glEnable( GL_DEPTH_TEST); // depth buffer
|
|
||||||
glDepthFunc( GL_LESS); // depth buffer
|
|
||||||
|
|
||||||
glFrontFace( GL_CCW); // face culling - front faces are AntiClockwise!
|
|
||||||
glCullFace( GL_BACK); // face culling
|
|
||||||
glEnable( GL_CULL_FACE); // face culling
|
|
||||||
|
|
||||||
glEnable( GL_BLEND); // alpha blending
|
|
||||||
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // alpha blending
|
|
||||||
|
|
||||||
if (UNIVERSE)
|
|
||||||
{
|
|
||||||
[UNIVERSE setLighting];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// At startup only...
|
|
||||||
GLfloat sun_ambient[] = {0.1, 0.1, 0.1, 1.0};
|
|
||||||
GLfloat sun_specular[] = {1.0, 1.0, 1.0, 1.0};
|
|
||||||
GLfloat sun_diffuse[] = {1.0, 1.0, 1.0, 1.0};
|
|
||||||
GLfloat sun_position[] = {0.0, 0.0, 0.0, 1.0};
|
|
||||||
GLfloat stars_ambient[] = {0.25, 0.2, 0.25, 1.0};
|
|
||||||
|
|
||||||
glLightfv(GL_LIGHT1, GL_AMBIENT, sun_ambient);
|
|
||||||
glLightfv(GL_LIGHT1, GL_SPECULAR, sun_specular);
|
|
||||||
glLightfv(GL_LIGHT1, GL_DIFFUSE, sun_diffuse);
|
|
||||||
glLightfv(GL_LIGHT1, GL_POSITION, sun_position);
|
|
||||||
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, stars_ambient);
|
|
||||||
|
|
||||||
glEnable(GL_LIGHT1); // lighting
|
|
||||||
}
|
|
||||||
glEnable(GL_LIGHTING); // lighting
|
|
||||||
|
|
||||||
// world's simplest OpenGL optimisations...
|
|
||||||
//glHint(GL_TRANSFORM_HINT_APPLE, GL_FASTEST);
|
|
||||||
glDisable(GL_NORMALIZE);
|
|
||||||
glDisable(GL_RESCALE_NORMAL);
|
|
||||||
|
|
||||||
m_glContextInitialized = YES;
|
m_glContextInitialized = YES;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user