/*
* 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_PIXELS_FORMATS_ATTRIBS_H
#define MAC_PIXELS_FORMATS_ATTRIBS_H

#include <Cocoa/Cocoa.h>
const NSOpenGLPixelFormatAttribute* const* getPixelFormatsAttributes(int* size);

void setCoreProfileLevel(NSOpenGLPixelFormatAttribute level);

const NSOpenGLPixelFormatAttribute* const getLegacyProfileAttributes();
const NSOpenGLPixelFormatAttribute* const  getCoreProfileAttributes();
#endif
