Support using OpenGL ES context on desktop
Support using OpenGL ES context on desktop for unix and Android platforms. This
is mainly useful in development.
Add --gpuAPI flag to gm, dm, bench, bench_pictures and render_pictures. The
possible parameters for the flag are "gl" and "gles".
R=bsalomon@google.com, mtklein@google.com, robertphillips@google.com
Author: kkinnunen@nvidia.com
Review URL: https://codereview.chromium.org/319043005
diff --git a/tools/PictureRenderer.h b/tools/PictureRenderer.h
index 13b60ec..12ed32e 100644
--- a/tools/PictureRenderer.h
+++ b/tools/PictureRenderer.h
@@ -163,7 +163,11 @@
/**
* Set the backend type. Returns true on success and false on failure.
*/
+#if SK_SUPPORT_GPU
+ bool setDeviceType(SkDeviceTypes deviceType, GrGLStandard gpuAPI = kNone_GrGLStandard) {
+#else
bool setDeviceType(SkDeviceTypes deviceType) {
+#endif
fDeviceType = deviceType;
#if SK_SUPPORT_GPU
// In case this function is called more than once
@@ -198,7 +202,7 @@
return false;
}
#if SK_SUPPORT_GPU
- fGrContext = fGrContextFactory.get(glContextType);
+ fGrContext = fGrContextFactory.get(glContextType, gpuAPI);
if (NULL == fGrContext) {
return false;
} else {
diff --git a/tools/PictureRenderingFlags.cpp b/tools/PictureRenderingFlags.cpp
index 3e78218..ccec158 100644
--- a/tools/PictureRenderingFlags.cpp
+++ b/tools/PictureRenderingFlags.cpp
@@ -26,6 +26,8 @@
#if SK_SUPPORT_GPU
+static const char kGpuAPINameGL[] = "gl";
+static const char kGpuAPINameGLES[] = "gles";
#define GPU_CONFIG_STRING "|gpu|msaa4|msaa16|nvprmsaa4|nvprmsaa16"
#else
#define GPU_CONFIG_STRING ""
@@ -72,6 +74,12 @@
DEFINE_string(tiles, "", "Used with --mode copyTile to specify number of tiles per larger tile "
"in the x and y directions.");
DEFINE_string(viewport, "", "width height: Set the viewport.");
+#if SK_SUPPORT_GPU
+DEFINE_string(gpuAPI, "", "Force use of specific gpu API. Using \"gl\" "
+ "forces OpenGL API. Using \"gles\" forces OpenGL ES API. "
+ "Defaults to empty string, which selects the API native to the "
+ "system.");
+#endif
sk_tools::PictureRenderer* parseRenderer(SkString& error, PictureTool tool) {
error.reset();
@@ -244,6 +252,21 @@
sk_tools::PictureRenderer::SkDeviceTypes deviceType =
sk_tools::PictureRenderer::kBitmap_DeviceType;
#if SK_SUPPORT_GPU
+ GrGLStandard gpuAPI = kNone_GrGLStandard;
+ if (1 == FLAGS_gpuAPI.count()) {
+ if (FLAGS_gpuAPI.contains(kGpuAPINameGL)) {
+ gpuAPI = kGL_GrGLStandard;
+ } else if (FLAGS_gpuAPI.contains(kGpuAPINameGLES)) {
+ gpuAPI = kGLES_GrGLStandard;
+ } else {
+ error.printf("--gpuAPI invalid api value.\n");
+ return NULL;
+ }
+ } else if (FLAGS_gpuAPI.count() > 1) {
+ error.printf("--gpuAPI invalid api value.\n");
+ return NULL;
+ }
+
int sampleCount = 0;
#endif
if (FLAGS_config.count() > 0) {
@@ -285,7 +308,14 @@
error.printf("%s is not a valid mode for --config\n", FLAGS_config[0]);
return NULL;
}
- renderer->setDeviceType(deviceType);
+#if SK_SUPPORT_GPU
+ if (!renderer->setDeviceType(deviceType, gpuAPI)) {
+#else
+ if (!renderer->setDeviceType(deviceType)) {
+#endif
+ error.printf("Could not create backend for --config %s\n", FLAGS_config[0]);
+ return NULL;
+ }
#if SK_SUPPORT_GPU
renderer->setSampleCount(sampleCount);
#endif