Jump to content

  • Log In with Google      Sign In   
  • Create Account


Nytegard

Member Since 17 Feb 2000
Offline Last Active Jan 06 2014 12:16 AM
-----

Topics I've Started

[SDL] Query when screen is capable of rendering

24 December 2013 - 01:53 AM

I'm changing the resolution and have multiple monitors and running full screen.  There's several seconds of delay where the screen is black.  I tried SDL_WINDOW_EVENT_SHOWN, but that was returning almost immediately while I was still waiting for the screen to actually display.  I'm looking for an efficient way of knowing when to start actually running the application rather than putting up a delay as a hack.  (I also queried all the Window Events and nothing is being called around the time when the screen returns to a drawable state).

 

*EDIT*

 

I only have this issue with multiple monitors.  If only using one monitor, everything works as expected, or if I use a window and not full screen, everything works as expected.


OS X, NSSplitView, Resizing, and drawing issues

02 February 2013 - 01:53 PM

OK, I've made a few changes but there's massive flickering on the reshape.  If I force a redraw without CVDisplayLinkIsRunning, everything draws correctly, but moving the splitter window and other resizes come to a crawl in speed.

 

 (NSOpenGLPixelFormat *) createPixelFormat
{
    NSOpenGLPixelFormatAttribute attr[] =
    {
        kCGLPFAAccelerated,
        kCGLPFADoubleBuffer,
        kCGLPFAColorSize, 32,
        kCGLPFADepthSize, 16,
        0
    };
    
    return [(NSOpenGLPixelFormat *)[NSOpenGLPixelFormat alloc]
            initWithAttributes:attr];
}


- (id)initWithFrame:(NSRect)frame
{
    NSOpenGLPixelFormat *pixelFormat;
    pixelFormat = [self createPixelFormat];
    self = [super initWithFrame:frame pixelFormat:pixelFormat];
    if (self)
    {
    }
    
    return self;
}

// This is the renderer output callback function
CVReturn MyDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp* now, const CVTimeStamp* outputTime, CVOptionFlags flagsIn, CVOptionFlags* flagsOut, void* displayLinkContext)
{
    CVReturn result = [(__bridge OpenGLHelper*)displayLinkContext getFrameForTime:outputTime];
    return result;
}

- (CVReturn)getFrameForTime:(const CVTimeStamp*)outputTime
{
    @autoreleasepool
    {
        if ([self lockFocusIfCanDraw])
        {
            // Add your drawing codes here
            NSRect curFrame = [self frame];
            [self drawFrame: curFrame];
            [self unlockFocus];
        }
    }
    return kCVReturnSuccess;
}

- (void) prepareOpenGL
{
    [super prepareOpenGL];
    
    // Synchronize buffer swaps with vertical refresh rate
    GLint swapInt = 1;
    
    [[self openGLContext] makeCurrentContext];
    
    [[self openGLContext] setValues:&swapInt forParameter:NSOpenGLCPSwapInterval];
    
    CGLLockContext([[self openGLContext] CGLContextObj]);
    if (nil != m_RTextures)
	{
		[m_RTextures LoadTexture];
	}
    glEnable( GL_TEXTURE_2D );                // Enable texture mapping
    glShadeModel( GL_SMOOTH );                // Enable smooth shading
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_LINE_SMOOTH);
    glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    
    CGLUnlockContext([[self openGLContext] CGLContextObj]);
    
    // Create a display link capable of being used with all active displays
    CVDisplayLinkCreateWithActiveCGDisplays(&displayLink);
    
    // Set the renderer output callback function
    CVDisplayLinkSetOutputCallback(displayLink, &MyDisplayLinkCallback, (__bridge void *)(self));
    
    // Set the display link for the current renderer
    CGLContextObj cglContext = [[self openGLContext] CGLContextObj];
    CGLPixelFormatObj cglPixelFormat = [[self pixelFormat] CGLPixelFormatObj];
    CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(displayLink, cglContext, cglPixelFormat);
    
    // Activate the display link
    CVDisplayLinkStart(displayLink);
}

- (void) reshape
{
	//[super setFrameSize:newSize];
	NSRect rect;
    [super reshape];
    CGLLockContext([[self openGLContext] CGLContextObj]);
    
	[[self openGLContext] makeCurrentContext];
	[[self openGLContext] update];
	rect = [self bounds];
	glViewport(0, 0, rect.size.width, rect.size.height);
    
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, rect.size.width, rect.size.height, 0, 0, 100.0f);
    
	CGLUnlockContext([[self openGLContext] CGLContextObj]);
    
    // Ignore if the display link is still running
    if (!CVDisplayLinkIsRunning(displayLink))
    {
        [self drawFrame:[self frame]];
    }
}

- (void)drawRect:(NSRect)dirtyRect
{
    // Ignore if the display link is still running
    if (!CVDisplayLinkIsRunning(displayLink))
    {
        [self drawFrame:dirtyRect];
    }
}

- (void) drawFrame:(NSRect)dirtyRect
{
    CGLLockContext([[self openGLContext] CGLContextObj]);
    
    [[self openGLContext] makeCurrentContext];
    
    glClearColor(0, 0, 0, 255);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    for(NSObject<GraphicsProtocol> *GraphicsObj in m_objectArray)
	{
		[GraphicsObj Render: dirtyRect];
	}

    CGLFlushDrawable([[self openGLContext] CGLContextObj]);
    
    CGLUnlockContext([[self openGLContext] CGLContextObj]);
}

Who to contact about help with GDNet+?

02 February 2012 - 04:56 PM

Not really a site suggestion, comment, etc. Just wondering because on 3 different occasions, I was sent an email about my GDNet+ subscription ending, and on two of them I paid (I have the paypal receipts and bank receipts), yet my subscription expired.

Just trying to find an email button for people with issues regarding the site.

New post vs unread post

25 April 2010 - 03:25 AM

Maybe I'm not looking in the correct place to change this setting, or I'm the only person who thinks this way (either of the above wouldn't suprise me). Rather than having New Post show up highlighted, is it possible to have Unread vs Read posting highlighted? I just find that it's easier for me to keep my position while browsing forums when I read one post, only to go back to the forum to find every post unhighlighted.

Robert Jordan dead

16 September 2007 - 05:11 PM

Well, apparently yet another cult figure died today. This Time Wheel of Time author Robert Jordan. http://www.dragonmount.com/RobertJordan/?p=90

PARTNERS