blob: e1205cd74c305d437a7c7da1d8826491bb875713 [file] [log] [blame]
/*
* Copyright 2011 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "GrTypes.h"
// must be before GrGLConfig.h
#if GR_WIN32_BUILD
// #include "GrGpuD3D9.h"
#endif
#include "GrGLConfig.h"
#include "GrGpu.h"
#include "GrGpuGLFixed.h"
#include "GrGpuGLShaders.h"
GrGpu* GrGpu::Create(GrEngine engine, GrPlatform3DContext context3D) {
if (kOpenGL_Shaders_GrEngine == engine ||
kOpenGL_Fixed_GrEngine == engine) {
// If no GL bindings have been installed, fall-back to calling the
// GL functions that have been linked with the executable.
if (!GrGLGetGLInterface()) {
GrGLSetDefaultGLInterface();
// If there is no platform-default then just fail.
if (!GrGLGetGLInterface()) {
return NULL;
}
}
if (!GrGLGetGLInterface()->validate(engine)) {
#if GR_DEBUG
GrPrintf("Failed GL interface validation!");
#endif
return NULL;
}
}
GrGpu* gpu = NULL;
switch (engine) {
case kOpenGL_Shaders_GrEngine:
GrAssert(NULL == (void*)context3D);
{
#if 0 // old code path, will be removed soon
gpu = new GrGpuGLShaders2;
#else
gpu = new GrGpuGLShaders;
#endif
}
break;
case kOpenGL_Fixed_GrEngine:
GrAssert(NULL == (void*)context3D);
gpu = new GrGpuGLFixed;
break;
case kDirect3D9_GrEngine:
GrAssert(NULL != (void*)context3D);
#if GR_WIN32_BUILD
// gpu = new GrGpuD3D9((IDirect3DDevice9*)context3D);
#endif
break;
default:
GrAssert(!"unknown engine");
break;
}
return gpu;
}