mirror of
https://github.com/thes3m/XNI
synced 2024-12-26 13:26:06 +01:00
Added support for preferedBackBufferWidth and Height.
git-svn-id: http://xni.googlecode.com/svn/XNI@56 ac433895-eea3-a490-d80a-17149a75e588
This commit is contained in:
parent
74ccf177c5
commit
216ff5773a
@ -25,6 +25,7 @@
|
|||||||
effect.specularColor = content.specularColor;
|
effect.specularColor = content.specularColor;
|
||||||
effect.emissiveColor = content.emissiveColor;
|
effect.emissiveColor = content.emissiveColor;
|
||||||
effect.texture = [input readSharedResourceFrom:content.texture];
|
effect.texture = [input readSharedResourceFrom:content.texture];
|
||||||
|
NSLog(@"loaded: %i", [effect.texture retainCount]);
|
||||||
effect.textureEnabled = effect.texture != nil;
|
effect.textureEnabled = effect.texture != nil;
|
||||||
|
|
||||||
return effect;
|
return effect;
|
||||||
|
@ -83,7 +83,7 @@
|
|||||||
// Check if we have already loaded this file.
|
// Check if we have already loaded this file.
|
||||||
id existing = [loadedFiles objectForKey:filePath];
|
id existing = [loadedFiles objectForKey:filePath];
|
||||||
if (existing) {
|
if (existing) {
|
||||||
return existing;
|
return [existing retain]; // TODO: Expecting a retained object crap! Remove when proper.
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find extension and absolute path.
|
// Find extension and absolute path.
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
- (id) readFromInput:(ContentReader *)input into:(id)existingInstance {
|
- (id) readFromInput:(ContentReader *)input into:(id)existingInstance {
|
||||||
ModelMeshContent *content = input.content;
|
ModelMeshContent *content = input.content;
|
||||||
|
|
||||||
|
NSLog(@"Mesh: %@", content.name);
|
||||||
|
|
||||||
// Create all model mesh parts.
|
// Create all model mesh parts.
|
||||||
NSMutableArray *meshParts = [NSMutableArray array];
|
NSMutableArray *meshParts = [NSMutableArray array];
|
||||||
for (ModelMeshPartContent *meshPartContent in content.meshParts) {
|
for (ModelMeshPartContent *meshPartContent in content.meshParts) {
|
||||||
|
@ -10,11 +10,13 @@
|
|||||||
#import <QuartzCore/QuartzCore.h>
|
#import <QuartzCore/QuartzCore.h>
|
||||||
|
|
||||||
#import "Retronator.Xni.Framework.h"
|
#import "Retronator.Xni.Framework.h"
|
||||||
|
#import "Retronator.Xni.Framework.Media.h"
|
||||||
|
|
||||||
@implementation GameHost
|
@implementation GameHost
|
||||||
|
|
||||||
- (id) init {
|
- (id) init {
|
||||||
if (self = [super init]) {
|
if (self = [super init]) {
|
||||||
|
[MediaPlayer load];
|
||||||
window = [[GameWindow alloc] init];
|
window = [[GameWindow alloc] init];
|
||||||
}
|
}
|
||||||
return self;
|
return self;
|
||||||
|
@ -11,15 +11,15 @@
|
|||||||
|
|
||||||
@implementation GameView
|
@implementation GameView
|
||||||
|
|
||||||
- (id) initWithFrame:(CGRect)frame {
|
- (id) initWithFrame:(CGRect)frame {
|
||||||
if (self = [super initWithFrame:frame]) {
|
if (self = [super initWithFrame:frame]) {
|
||||||
|
|
||||||
viewSizeChanged = [[Event alloc] init];
|
viewSizeChanged = [[Event alloc] init];
|
||||||
|
|
||||||
CAEAGLLayer *eaglLayer = (CAEAGLLayer*)self.layer;
|
CAEAGLLayer *eaglLayer = (CAEAGLLayer*)self.layer;
|
||||||
|
|
||||||
eaglLayer.contentsScale = [UIScreen mainScreen].scale;
|
//eaglLayer.contentsScale = [UIScreen mainScreen].scale;
|
||||||
eaglLayer.opaque = TRUE;
|
eaglLayer.opaque = YES;
|
||||||
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
|
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
|
||||||
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking,
|
[NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking,
|
||||||
kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
|
kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
|
||||||
|
@ -102,7 +102,7 @@
|
|||||||
[self dismissModalViewControllerAnimated:YES];
|
[self dismissModalViewControllerAnimated:YES];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)loadView {
|
- (void)loadView {
|
||||||
GameView *gameView = [[GameView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
|
GameView *gameView = [[GameView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
|
||||||
self.view = gameView;
|
self.view = gameView;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
@property (nonatomic, readonly) Event *orientationChanged;
|
@property (nonatomic, readonly) Event *orientationChanged;
|
||||||
|
|
||||||
- (void) beginScreenDeviceChangeWithFullscreen:(BOOL)willBeFullscreen;
|
- (void) beginScreenDeviceChangeWithFullscreen:(BOOL)willBeFullscreen;
|
||||||
- (void) endScreenDeviceChange;
|
- (void) endScreenDeviceChangeWithClientWidth:(int)clientWidth clientHeight:(int)clientHeight;
|
||||||
|
|
||||||
- (void) setSupportedOrientations:(DisplayOrientation)orientations;
|
- (void) setSupportedOrientations:(DisplayOrientation)orientations;
|
||||||
|
|
||||||
|
@ -59,13 +59,50 @@
|
|||||||
- (void) beginScreenDeviceChangeWithFullscreen:(BOOL)willBeFullscreen {
|
- (void) beginScreenDeviceChangeWithFullscreen:(BOOL)willBeFullscreen {
|
||||||
gameViewController.wantsFullScreenLayout = willBeFullscreen;
|
gameViewController.wantsFullScreenLayout = willBeFullscreen;
|
||||||
[[UIApplication sharedApplication] setStatusBarHidden:willBeFullscreen];
|
[[UIApplication sharedApplication] setStatusBarHidden:willBeFullscreen];
|
||||||
gameViewController.view.frame = [UIScreen mainScreen].applicationFrame;
|
|
||||||
[clientBounds release];
|
|
||||||
clientBounds = [[self calculateClientBounds] retain];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) endScreenDeviceChange {
|
- (void) endScreenDeviceChangeWithClientWidth:(int)clientWidth clientHeight:(int)clientHeight {
|
||||||
|
CGRect realFrame = [UIScreen mainScreen].applicationFrame;
|
||||||
|
float realAspectRatio = realFrame.size.width / realFrame.size.height;
|
||||||
|
|
||||||
|
if (clientWidth == 0) {
|
||||||
|
clientWidth = realFrame.size.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (clientHeight == 0) {
|
||||||
|
clientHeight = realFrame.size.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
float targetAspectRatio = (float)clientWidth/(float)clientHeight;
|
||||||
|
CGRect targetFrame;
|
||||||
|
|
||||||
|
if (targetAspectRatio >= realAspectRatio) {
|
||||||
|
// Add black borders on top and bottom.
|
||||||
|
targetFrame.size.width = realFrame.size.width;
|
||||||
|
targetFrame.size.height = targetFrame.size.width / targetAspectRatio;
|
||||||
|
} else {
|
||||||
|
// Add black borders on left and right.
|
||||||
|
targetFrame.size.height = realFrame.size.height;
|
||||||
|
targetFrame.size.width = targetFrame.size.height * targetAspectRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Center the window.
|
||||||
|
targetFrame.origin.x = realFrame.origin.x + (realFrame.size.width - targetFrame.size.width) / 2;
|
||||||
|
targetFrame.origin.y = realFrame.origin.y + (realFrame.size.height - targetFrame.size.height) / 2;
|
||||||
|
|
||||||
|
// Resize the target view.
|
||||||
|
gameViewController.view.frame = targetFrame;
|
||||||
|
|
||||||
|
// Recalculate client bounds.
|
||||||
|
[clientBounds release];
|
||||||
|
clientBounds = [[self calculateClientBounds] retain];
|
||||||
|
|
||||||
|
// Set scale factor.
|
||||||
|
if (targetAspectRatio >= realAspectRatio) {
|
||||||
|
gameViewController.view.contentScaleFactor = clientWidth / realFrame.size.width;
|
||||||
|
} else {
|
||||||
|
gameViewController.view.contentScaleFactor = clientHeight / realFrame.size.height;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) initialize {
|
- (void) initialize {
|
||||||
@ -74,6 +111,7 @@
|
|||||||
|
|
||||||
// Create game view controller.
|
// Create game view controller.
|
||||||
gameViewController = [[GameViewController alloc] initWithGameWindow:self];
|
gameViewController = [[GameViewController alloc] initWithGameWindow:self];
|
||||||
|
|
||||||
[((GameView*)gameViewController.view).viewSizeChanged
|
[((GameView*)gameViewController.view).viewSizeChanged
|
||||||
subscribeDelegate:[Delegate delegateWithTarget:self Method:@selector(gameViewSizeChanged)]];
|
subscribeDelegate:[Delegate delegateWithTarget:self Method:@selector(gameViewSizeChanged)]];
|
||||||
|
|
||||||
@ -102,7 +140,7 @@
|
|||||||
|
|
||||||
- (Rectangle*) calculateClientBounds {
|
- (Rectangle*) calculateClientBounds {
|
||||||
Rectangle *bounds = [Rectangle rectangleWithCGRect:gameViewController.view.bounds];
|
Rectangle *bounds = [Rectangle rectangleWithCGRect:gameViewController.view.bounds];
|
||||||
float scale = [UIScreen mainScreen].scale;
|
float scale = gameViewController.view.contentScaleFactor;
|
||||||
bounds.width *= scale;
|
bounds.width *= scale;
|
||||||
bounds.height *= scale;
|
bounds.height *= scale;
|
||||||
return bounds;
|
return bounds;
|
||||||
|
@ -13,6 +13,8 @@
|
|||||||
@interface GraphicsDevice (Internal)
|
@interface GraphicsDevice (Internal)
|
||||||
|
|
||||||
- (uint) createTexture;
|
- (uint) createTexture;
|
||||||
|
- (void) releaseTexture:(uint)textureId;
|
||||||
|
|
||||||
//- (void) getData:(void*)data fromTexture2D:(Texture2D*)texture level:(int)level;
|
//- (void) getData:(void*)data fromTexture2D:(Texture2D*)texture level:(int)level;
|
||||||
- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level;
|
- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level;
|
||||||
|
|
||||||
|
@ -327,6 +327,10 @@
|
|||||||
return textureId;
|
return textureId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) releaseTexture:(uint)textureId {
|
||||||
|
glDeleteTextures(1, &textureId);
|
||||||
|
}
|
||||||
|
|
||||||
- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level {
|
- (void) setData:(void*)data toTexture2D:(Texture2D*)texture SourceRectangle:(Rectangle*)rect level:(int)level {
|
||||||
GLenum format, type;
|
GLenum format, type;
|
||||||
[GraphicsDevice getFormat:&format AndType:&type ForSurfaceFormat:texture.format];
|
[GraphicsDevice getFormat:&format AndType:&type ForSurfaceFormat:texture.format];
|
||||||
|
@ -92,5 +92,12 @@
|
|||||||
[graphicsDevice setData:data toTexture2D:self SourceRectangle:rect level:level];
|
[graphicsDevice setData:data toTexture2D:self SourceRectangle:rect level:level];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) dealloc
|
||||||
|
{
|
||||||
|
[graphicsDevice releaseTexture:textureId];
|
||||||
|
[super dealloc];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -72,6 +72,7 @@
|
|||||||
- (void) applyChanges {
|
- (void) applyChanges {
|
||||||
[game.window setSupportedOrientations:supportedOrientations];
|
[game.window setSupportedOrientations:supportedOrientations];
|
||||||
[game.window beginScreenDeviceChangeWithFullscreen:isFullScreen];
|
[game.window beginScreenDeviceChangeWithFullscreen:isFullScreen];
|
||||||
|
[game.window endScreenDeviceChangeWithClientWidth:self.preferedBackBufferWidth clientHeight:self.preferedBackBufferHeight];
|
||||||
|
|
||||||
if (graphicsDevice != nil && graphicsDevice.graphicsProfile != graphicsProfile) {
|
if (graphicsDevice != nil && graphicsDevice.graphicsProfile != graphicsProfile) {
|
||||||
// Different graphics profile requested.
|
// Different graphics profile requested.
|
||||||
@ -91,13 +92,11 @@
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
[game.window endScreenDeviceChange];
|
|
||||||
[deviceCreated raiseWithSender:self];
|
[deviceCreated raiseWithSender:self];
|
||||||
} else {
|
} else {
|
||||||
// Reset the existing device.
|
// Reset the existing device.
|
||||||
[deviceResetting raiseWithSender:self];
|
[deviceResetting raiseWithSender:self];
|
||||||
[graphicsDevice reset];
|
[graphicsDevice reset];
|
||||||
[game.window endScreenDeviceChange];
|
|
||||||
[deviceReset raiseWithSender:self];
|
[deviceReset raiseWithSender:self];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -147,7 +147,7 @@ static TouchPanel *instance;
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
|
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
|
||||||
float scale = [UIScreen mainScreen].scale;
|
float scale = view.contentScaleFactor;
|
||||||
for (UITouch *touch in touches) {
|
for (UITouch *touch in touches) {
|
||||||
XniTouchLocation *location = [touchLocations objectForKey:touch];
|
XniTouchLocation *location = [touchLocations objectForKey:touch];
|
||||||
if (location) {
|
if (location) {
|
||||||
@ -194,7 +194,7 @@ static TouchPanel *instance;
|
|||||||
lateReleaseTouches = temp;
|
lateReleaseTouches = temp;
|
||||||
|
|
||||||
// Add new touches
|
// Add new touches
|
||||||
float scale = [UIScreen mainScreen].scale;
|
float scale = view.contentScaleFactor;
|
||||||
for (UITouch *touch in addTouches) {
|
for (UITouch *touch in addTouches) {
|
||||||
CGPoint position = [touch locationInView:view];
|
CGPoint position = [touch locationInView:view];
|
||||||
XniTouchLocation *location = [[[XniTouchLocation alloc]
|
XniTouchLocation *location = [[[XniTouchLocation alloc]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user