/*
* Copyright 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef  MAC_NATIVE_H
#define  MAC_NATIVE_H

#include <OpenGL/gl.h>

typedef enum {                               // Mac equivalence
                 MAC_HAS_DOUBLE_BUFFER = 5,  // NSOpenGLPFADoubleBuffer
                 MAC_DRAW_TO_WINDOW    = 80, // NSOpenGLPFAWindow
                 MAC_DRAW_TO_PBUFFER   = 90, // NSOpenGLPFAPixelBuffer
                 MAC_SAMPLES_PER_PIXEL = 56, // NSOpenGLPFASamples
                 MAC_OPENGL_PROFILE    = 99, // NSOpenGLPFAOpenGLProfile
                 MAC_COLOR_SIZE        = 8,  // NSOpenGLPFAColorSize
                 MAC_ALPHA_SIZE        = 11, // NSOpenGLPFAAlphaSize
                 MAC_DEPTH_SIZE        = 12, // NSOpenGLPFADepthSize
                 MAC_STENCIL_SIZE      = 13  // NSOpenGLPFAStencilSize
             } MacPixelFormatAttribs;

typedef enum {
                 MAC_OPENGL_PROFILE_LEGACY = 0x1000, // NSOpenGLProfileVersionLegacy
                 MAC_OPENGL_PROFILE_3_2    = 0x3200, // NSOpenGLProfileVersion3_2Core
                 MAC_OPENGL_PROFILE_4_1    = 0x4100, // NSOpenGLProfileVersion4_1Core
             } MacOpenGLProfileVersions;


extern "C"{

int setupCoreProfileNativeFormats();

int getNumPixelFormats();

void* finalizePixelFormat(
    bool coreProfile, int pixelFormatIndex);

int getPixelFormatAttrib(int i, int attrib);

void* nsCreateContext(void* finalizedPixelFormat,void* share);
void* nsGetLowLevelContext(void* context);
// convert to NV12 textures from decoded output iosurface
void nsConvertVideoFrameToNV12Textures(void* context,
                                       void* iosurface,
                                       int Ytex,
                                       int UVtex);

// copy texture "from" to "to"
// from: GL_TEXTURE_RECTANGLE
// to:   GL_TEXTURE_2D

void nsCopyTexture(void* context, int from, int to, int w, int h);

void nsWindowMakeCurrent(void* context,void* nativeWin);
void nsPBufferMakeCurrent(void* context,void* nativePBuffer,int level);
void nsSwapBuffers();
void nsSwapInterval(int *interval);
void nsDestroyContext(void* context);
void* nsCreatePBuffer(GLenum target,GLenum format,int maxMip,int width,int height);
void nsDestroyPBuffer(void* pbuffer);
bool nsGetWinDims(void* win,unsigned int* width,unsigned int* height);
bool nsCheckColor(void* win,int colorSize);
void* nsGetLayer(void* nativeWin);

}

#endif
