aboutsummaryrefslogtreecommitdiffhomepage
path: root/experimental
diff options
context:
space:
mode:
authorGravatar jvanverth <jvanverth@google.com>2015-10-09 13:27:33 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-10-09 13:27:34 -0700
commitcda8ec2b030c6fcb58d2d11f4983a14c0f355235 (patch)
treeadddc8443789e8533f4252e167349dc0451e6d47 /experimental
parent939c0fe51f157104758bcb268643c8b6d317a530 (diff)
Add test with GLFW framework
Diffstat (limited to 'experimental')
-rw-r--r--experimental/GLFWTest/.gitignore2
-rw-r--r--experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj411
-rw-r--r--experimental/GLFWTest/Info.plist34
-rw-r--r--experimental/GLFWTest/README.txt6
-rw-r--r--experimental/GLFWTest/glfw_main.cpp179
5 files changed, 632 insertions, 0 deletions
diff --git a/experimental/GLFWTest/.gitignore b/experimental/GLFWTest/.gitignore
new file mode 100644
index 0000000000..7bf8ccfd30
--- /dev/null
+++ b/experimental/GLFWTest/.gitignore
@@ -0,0 +1,2 @@
+project.xcworkspace/
+xcuserdata/
diff --git a/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj b/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..259ad2d214
--- /dev/null
+++ b/experimental/GLFWTest/GLFWTest.xcodeproj/project.pbxproj
@@ -0,0 +1,411 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ AF48715A1BBB21990090FF83 /* glfw_main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AF4871591BBB21990090FF83 /* glfw_main.cpp */; };
+ AF48715C1BBB255E0090FF83 /* libglfw3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AF48715B1BBB255E0090FF83 /* libglfw3.a */; };
+ AF4872741BBB26770090FF83 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872701BBB26770090FF83 /* Cocoa.framework */; };
+ AF4872751BBB26770090FF83 /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872711BBB26770090FF83 /* CoreVideo.framework */; };
+ AF4872761BBB26770090FF83 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872721BBB26770090FF83 /* IOKit.framework */; };
+ AF4872771BBB26770090FF83 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF4872731BBB26770090FF83 /* OpenGL.framework */; };
+ AFE840981BBC3B46008D1091 /* libskia_skgpu.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840971BBC3B46008D1091 /* libskia_skgpu.a */; };
+ AFE8409B1BBC3B7A008D1091 /* libskia_core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE8409A1BBC3B7A008D1091 /* libskia_core.a */; settings = {ATTRIBUTES = (Required, ); }; };
+ AFE8409D1BBC3B88008D1091 /* libskia_utils.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE8409C1BBC3B88008D1091 /* libskia_utils.a */; };
+ AFE840A31BBC3C4D008D1091 /* libskia_ports.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A21BBC3C4D008D1091 /* libskia_ports.a */; };
+ AFE840A51BBC3C6D008D1091 /* libskia_images.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A41BBC3C6C008D1091 /* libskia_images.a */; };
+ AFE840A71BBC3C9E008D1091 /* libskia_opts.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A61BBC3C9E008D1091 /* libskia_opts.a */; };
+ AFE840A91BBC3CBC008D1091 /* libskia_opts_ssse3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */; settings = {ATTRIBUTES = (Weak, ); }; };
+ AFE840AD1BBC3CD3008D1091 /* libskia_opts_sse41.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */; settings = {ATTRIBUTES = (Weak, ); }; };
+ AFE840AF1BBC3CFB008D1091 /* libskia_effects.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */; };
+ AFE840B11BBC3D55008D1091 /* libSkKTX.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B01BBC3D55008D1091 /* libSkKTX.a */; };
+ AFE840B31BBC3D66008D1091 /* libetc1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B21BBC3D66008D1091 /* libetc1.a */; };
+ AFE840B51BBC3D92008D1091 /* libskia_sfnt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */; };
+ AFE840B71BBC5A5F008D1091 /* libtimer.a in Frameworks */ = {isa = PBXBuildFile; fileRef = AFE840B61BBC5A5F008D1091 /* libtimer.a */; };
+ AFE840B91BBC5AC9008D1091 /* ship.png in Resources */ = {isa = PBXBuildFile; fileRef = AFE840B81BBC5AC9008D1091 /* ship.png */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ AF4871311BBB21290090FF83 /* GLFWTest.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GLFWTest.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ AF4871571BBB218D0090FF83 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = SOURCE_ROOT; };
+ AF4871591BBB21990090FF83 /* glfw_main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glfw_main.cpp; sourceTree = SOURCE_ROOT; };
+ AF48715B1BBB255E0090FF83 /* libglfw3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libglfw3.a; path = "glfw-3.1.1/src/libglfw3.a"; sourceTree = SOURCE_ROOT; };
+ AF4872701BBB26770090FF83 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = ../../../../../../../../System/Library/Frameworks/Cocoa.framework; sourceTree = "<group>"; };
+ AF4872711BBB26770090FF83 /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = ../../../../../../../../System/Library/Frameworks/CoreVideo.framework; sourceTree = "<group>"; };
+ AF4872721BBB26770090FF83 /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = ../../../../../../../../System/Library/Frameworks/IOKit.framework; sourceTree = "<group>"; };
+ AF4872731BBB26770090FF83 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = ../../../../../../../../System/Library/Frameworks/OpenGL.framework; sourceTree = "<group>"; };
+ AFE840971BBC3B46008D1091 /* libskia_skgpu.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_skgpu.a; path = ../../../out/Release/libskia_skgpu.a; sourceTree = "<group>"; };
+ AFE8409A1BBC3B7A008D1091 /* libskia_core.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_core.a; path = ../../../out/Release/libskia_core.a; sourceTree = "<group>"; };
+ AFE8409C1BBC3B88008D1091 /* libskia_utils.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_utils.a; path = ../../../out/Release/libskia_utils.a; sourceTree = "<group>"; };
+ AFE840A21BBC3C4D008D1091 /* libskia_ports.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_ports.a; path = ../../../out/Release/libskia_ports.a; sourceTree = "<group>"; };
+ AFE840A41BBC3C6C008D1091 /* libskia_images.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_images.a; path = ../../../out/Release/libskia_images.a; sourceTree = "<group>"; };
+ AFE840A61BBC3C9E008D1091 /* libskia_opts.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts.a; path = ../../../out/Release/libskia_opts.a; sourceTree = "<group>"; };
+ AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_ssse3.a; path = ../../../out/Release/libskia_opts_ssse3.a; sourceTree = "<group>"; };
+ AFE840AA1BBC3CCC008D1091 /* libskia_opts_sse4.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_sse4.a; path = ../../../out/Release/libskia_opts_sse4.a; sourceTree = "<group>"; };
+ AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_opts_sse41.a; path = ../../../out/Release/libskia_opts_sse41.a; sourceTree = "<group>"; };
+ AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_effects.a; path = ../../../out/Release/libskia_effects.a; sourceTree = "<group>"; };
+ AFE840B01BBC3D55008D1091 /* libSkKTX.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libSkKTX.a; path = ../../../out/Release/libSkKTX.a; sourceTree = "<group>"; };
+ AFE840B21BBC3D66008D1091 /* libetc1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libetc1.a; path = ../../../out/Release/libetc1.a; sourceTree = "<group>"; };
+ AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libskia_sfnt.a; path = ../../../out/Release/libskia_sfnt.a; sourceTree = "<group>"; };
+ AFE840B61BBC5A5F008D1091 /* libtimer.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtimer.a; path = ../../../out/Debug/libtimer.a; sourceTree = "<group>"; };
+ AFE840B81BBC5AC9008D1091 /* ship.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ship.png; sourceTree = SOURCE_ROOT; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ AF48712E1BBB21290090FF83 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AFE8409B1BBC3B7A008D1091 /* libskia_core.a in Frameworks */,
+ AFE840981BBC3B46008D1091 /* libskia_skgpu.a in Frameworks */,
+ AF4872741BBB26770090FF83 /* Cocoa.framework in Frameworks */,
+ AF48715C1BBB255E0090FF83 /* libglfw3.a in Frameworks */,
+ AFE840B11BBC3D55008D1091 /* libSkKTX.a in Frameworks */,
+ AFE840A31BBC3C4D008D1091 /* libskia_ports.a in Frameworks */,
+ AF4872751BBB26770090FF83 /* CoreVideo.framework in Frameworks */,
+ AFE8409D1BBC3B88008D1091 /* libskia_utils.a in Frameworks */,
+ AFE840B31BBC3D66008D1091 /* libetc1.a in Frameworks */,
+ AFE840B51BBC3D92008D1091 /* libskia_sfnt.a in Frameworks */,
+ AFE840AD1BBC3CD3008D1091 /* libskia_opts_sse41.a in Frameworks */,
+ AFE840A71BBC3C9E008D1091 /* libskia_opts.a in Frameworks */,
+ AF4872771BBB26770090FF83 /* OpenGL.framework in Frameworks */,
+ AFE840B71BBC5A5F008D1091 /* libtimer.a in Frameworks */,
+ AF4872761BBB26770090FF83 /* IOKit.framework in Frameworks */,
+ AFE840AF1BBC3CFB008D1091 /* libskia_effects.a in Frameworks */,
+ AFE840A51BBC3C6D008D1091 /* libskia_images.a in Frameworks */,
+ AFE840A91BBC3CBC008D1091 /* libskia_opts_ssse3.a in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ AF4871281BBB21290090FF83 = {
+ isa = PBXGroup;
+ children = (
+ AF4871331BBB21290090FF83 /* GLFWTest */,
+ AF4871321BBB21290090FF83 /* Products */,
+ );
+ sourceTree = "<group>";
+ };
+ AF4871321BBB21290090FF83 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ AF4871311BBB21290090FF83 /* GLFWTest.app */,
+ );
+ name = Products;
+ sourceTree = "<group>";
+ };
+ AF4871331BBB21290090FF83 /* GLFWTest */ = {
+ isa = PBXGroup;
+ children = (
+ AF4871591BBB21990090FF83 /* glfw_main.cpp */,
+ AFE840991BBC3B61008D1091 /* Skia */,
+ AF48726F1BBB25A40090FF83 /* Frameworks */,
+ AF4871341BBB212A0090FF83 /* Supporting Files */,
+ );
+ path = GLFWTest;
+ sourceTree = "<group>";
+ };
+ AF4871341BBB212A0090FF83 /* Supporting Files */ = {
+ isa = PBXGroup;
+ children = (
+ AFE840B81BBC5AC9008D1091 /* ship.png */,
+ AF4871571BBB218D0090FF83 /* Info.plist */,
+ );
+ name = "Supporting Files";
+ sourceTree = "<group>";
+ };
+ AF48726F1BBB25A40090FF83 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AF48715B1BBB255E0090FF83 /* libglfw3.a */,
+ AF4872701BBB26770090FF83 /* Cocoa.framework */,
+ AF4872711BBB26770090FF83 /* CoreVideo.framework */,
+ AF4872721BBB26770090FF83 /* IOKit.framework */,
+ AF4872731BBB26770090FF83 /* OpenGL.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "<group>";
+ };
+ AFE840991BBC3B61008D1091 /* Skia */ = {
+ isa = PBXGroup;
+ children = (
+ AFE8409A1BBC3B7A008D1091 /* libskia_core.a */,
+ AFE840AE1BBC3CFB008D1091 /* libskia_effects.a */,
+ AFE840B21BBC3D66008D1091 /* libetc1.a */,
+ AFE840B01BBC3D55008D1091 /* libSkKTX.a */,
+ AFE840A41BBC3C6C008D1091 /* libskia_images.a */,
+ AFE840A61BBC3C9E008D1091 /* libskia_opts.a */,
+ AFE840A81BBC3CBC008D1091 /* libskia_opts_ssse3.a */,
+ AFE840AA1BBC3CCC008D1091 /* libskia_opts_sse4.a */,
+ AFE840AC1BBC3CD3008D1091 /* libskia_opts_sse41.a */,
+ AFE840A21BBC3C4D008D1091 /* libskia_ports.a */,
+ AFE840B41BBC3D92008D1091 /* libskia_sfnt.a */,
+ AFE8409C1BBC3B88008D1091 /* libskia_utils.a */,
+ AFE840971BBC3B46008D1091 /* libskia_skgpu.a */,
+ AFE840B61BBC5A5F008D1091 /* libtimer.a */,
+ );
+ name = Skia;
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ AF4871301BBB21290090FF83 /* GLFWTest */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AF4871511BBB212A0090FF83 /* Build configuration list for PBXNativeTarget "GLFWTest" */;
+ buildPhases = (
+ AF48712D1BBB21290090FF83 /* Sources */,
+ AF48712E1BBB21290090FF83 /* Frameworks */,
+ AF48712F1BBB21290090FF83 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = GLFWTest;
+ productName = GLFWTest;
+ productReference = AF4871311BBB21290090FF83 /* GLFWTest.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ AF4871291BBB21290090FF83 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0630;
+ ORGANIZATIONNAME = "Jim Van Verth";
+ TargetAttributes = {
+ AF4871301BBB21290090FF83 = {
+ CreatedOnToolsVersion = 6.3.2;
+ };
+ };
+ };
+ buildConfigurationList = AF48712C1BBB21290090FF83 /* Build configuration list for PBXProject "GLFWTest" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = AF4871281BBB21290090FF83;
+ productRefGroup = AF4871321BBB21290090FF83 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ AF4871301BBB21290090FF83 /* GLFWTest */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ AF48712F1BBB21290090FF83 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AFE840B91BBC5AC9008D1091 /* ship.png in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ AF48712D1BBB21290090FF83 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ AF48715A1BBB21990090FF83 /* glfw_main.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin XCBuildConfiguration section */
+ AF48714F1BBB212A0090FF83 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_SYMBOLS_PRIVATE_EXTERN = NO;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../include/gpu,
+ ../../include/utils,
+ ../../include/config,
+ ../../include/core,
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ };
+ name = Debug;
+ };
+ AF4871501BBB212A0090FF83 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../include/gpu,
+ ../../include/utils,
+ ../../include/config,
+ ../../include/core,
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ );
+ MACOSX_DEPLOYMENT_TARGET = 10.10;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ };
+ name = Release;
+ };
+ AF4871521BBB212A0090FF83 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../include/gpu,
+ ../../include/utils,
+ ../../include/config,
+ ../../include/core,
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ ../../tools/timer,
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/../../out/Debug",
+ "$(PROJECT_DIR)/../../third_party/externals/glfw/src",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../third_party/externals/glfw/include";
+ };
+ name = Debug;
+ };
+ AF4871531BBB212A0090FF83 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ COMBINE_HIDPI_IMAGES = YES;
+ HEADER_SEARCH_PATHS = (
+ ../../include/gpu,
+ ../../include/utils,
+ ../../include/config,
+ ../../include/core,
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ ../../tools/timer,
+ );
+ "HEADER_SEARCH_PATHS[arch=*]" = (
+ ../../include/gpu,
+ ../../include/utils,
+ ../../include/config,
+ ../../include/core,
+ "$(inherited)",
+ /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include,
+ ../../tools/timer,
+ );
+ INFOPLIST_FILE = "$(SRCROOT)/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks";
+ LIBRARY_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(PROJECT_DIR)/../../out/Release",
+ "$(PROJECT_DIR)/../../third_party/externals/glfw/src",
+ );
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ USER_HEADER_SEARCH_PATHS = "$(PROJECT_DIR)/../../third_party/externals/glfw/include";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ AF48712C1BBB21290090FF83 /* Build configuration list for PBXProject "GLFWTest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AF48714F1BBB212A0090FF83 /* Debug */,
+ AF4871501BBB212A0090FF83 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AF4871511BBB212A0090FF83 /* Build configuration list for PBXNativeTarget "GLFWTest" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AF4871521BBB212A0090FF83 /* Debug */,
+ AF4871531BBB212A0090FF83 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = AF4871291BBB21290090FF83 /* Project object */;
+}
diff --git a/experimental/GLFWTest/Info.plist b/experimental/GLFWTest/Info.plist
new file mode 100644
index 0000000000..cbd8696a78
--- /dev/null
+++ b/experimental/GLFWTest/Info.plist
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>Google.$(PRODUCT_NAME:rfc1034identifier)</string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>1.0</string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>1</string>
+ <key>LSMinimumSystemVersion</key>
+ <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
+ <key>NSHumanReadableCopyright</key>
+ <string>Copyright © 2015 Google. All rights reserved.</string>
+ <key>NSMainStoryboardFile</key>
+ <string>Main</string>
+ <key>NSPrincipalClass</key>
+ <string>NSApplication</string>
+</dict>
+</plist>
diff --git a/experimental/GLFWTest/README.txt b/experimental/GLFWTest/README.txt
new file mode 100644
index 0000000000..2be3f24940
--- /dev/null
+++ b/experimental/GLFWTest/README.txt
@@ -0,0 +1,6 @@
+This test is Mac-only for now. Adding Linux or Win support shouldn’t be that difficult — it just needs a project file.
+
+To run this demo, you’ll need to do three things:
+1) Get GLFW 3.1.1 or later, and install it at third_party/externals/glfw. You’ll need to run ‘cmake’ in that directory to build the makefiles, and then ‘make’ to build the libglfw.a library.
+2) Build the skia libraries via the command line (by running ‘ninja -C out/<config> dm’, for example.
+3) Get a ship.png file. Place it in this directory.
diff --git a/experimental/GLFWTest/glfw_main.cpp b/experimental/GLFWTest/glfw_main.cpp
new file mode 100644
index 0000000000..bf91760ac0
--- /dev/null
+++ b/experimental/GLFWTest/glfw_main.cpp
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GLFW/glfw3.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "GrContext.h"
+
+#include "SkCanvas.h"
+#include "SkImage.h"
+#include "SkRSXform.h"
+#include "SkSurface.h"
+#include "Timer.h"
+
+GrContext* sContext = nullptr;
+SkSurface* sSurface = nullptr;
+
+static void error_callback(int error, const char* description) {
+ fputs(description, stderr);
+}
+
+static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods) {
+ if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
+ glfwSetWindowShouldClose(window, GL_TRUE);
+}
+
+
+static void init_skia(int w, int h) {
+ sContext = GrContext::Create(kOpenGL_GrBackend, 0);
+
+ GrBackendRenderTargetDesc desc;
+ desc.fWidth = w;
+ desc.fHeight = h;
+ desc.fConfig = kSkia8888_GrPixelConfig;
+ desc.fOrigin = kBottomLeft_GrSurfaceOrigin;
+ desc.fSampleCnt = 1;
+ desc.fStencilBits = 0;
+ desc.fRenderTargetHandle = 0; // assume default framebuffer
+
+ sSurface = SkSurface::NewFromBackendRenderTarget(sContext, desc, NULL);
+}
+
+static void cleanup_skia() {
+ delete sSurface;
+ delete sContext;
+}
+
+const int kGrid = 100;
+const int kWidth = 960;
+const int kHeight = 640;
+
+int main(void) {
+ GLFWwindow* window;
+ glfwSetErrorCallback(error_callback);
+ if (!glfwInit()) {
+ exit(EXIT_FAILURE);
+ }
+
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
+ glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
+ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
+ glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
+ glfwWindowHint(GLFW_SRGB_CAPABLE, GL_TRUE);
+
+ window = glfwCreateWindow(kWidth, kHeight, "Simple example", NULL, NULL);
+ if (!window) {
+ glfwTerminate();
+ exit(EXIT_FAILURE);
+ }
+ glfwMakeContextCurrent(window);
+
+ init_skia(kWidth, kHeight);
+
+ SkAutoTUnref<SkImage> atlas;
+ SkRSXform xform[kGrid*kGrid+1];
+ SkRect tex[kGrid*kGrid+1];
+ WallTimer timer;
+ float times[32];
+ int currentTime;
+
+ SkAutoTUnref<SkData> imageData(SkData::NewFromFileName("ship.png"));
+ atlas.reset(SkImage::NewFromEncoded(imageData));
+ if (!atlas) {
+ SkDebugf("\nCould not decode file ship.png\n");
+
+ cleanup_skia();
+ glfwDestroyWindow(window);
+ glfwTerminate();
+ exit(EXIT_FAILURE);
+ }
+
+ SkScalar anchorX = atlas->width()*0.5f;
+ SkScalar anchorY = atlas->height()*0.5f;
+ int currIndex = 0;
+ for (int x = 0; x < kGrid; x++) {
+ for (int y = 0; y < kGrid; y++) {
+ float xPos = (x / (kGrid - 1.0)) * kWidth;
+ float yPos = (y / (kGrid - 1.0)) * kWidth;
+
+ tex[currIndex] = SkRect::MakeLTRB(0.0f, 0.0f, atlas->width(), atlas->height());
+ xform[currIndex] = SkRSXform::MakeFromRadians(2.0f, SK_ScalarPI*0.5f,
+ xPos, yPos, anchorX, anchorY);
+ currIndex++;
+ }
+ }
+ tex[currIndex] = SkRect::MakeLTRB(0.0f, 0.0f, atlas->width(), atlas->height());
+ xform[currIndex] = SkRSXform::MakeFromRadians(2.0f, SK_ScalarPI*0.5f,
+ kWidth*0.5f, kHeight*0.5f, anchorX, anchorY);
+
+ currentTime = 0;
+
+ glfwSwapInterval(1);
+ glfwSetKeyCallback(window, key_callback);
+
+ // Draw to the surface via its SkCanvas.
+ SkCanvas* canvas = sSurface->getCanvas(); // We don't manage this pointer's lifetime.
+ SkPaint paint;
+ paint.setFilterQuality(kLow_SkFilterQuality);
+ paint.setColor(SK_ColorWHITE);
+ paint.setTextSize(15.0f);
+
+ while (!glfwWindowShouldClose(window)) {
+ const float kCosDiff = 0.99984769515f;
+ const float kSinDiff = 0.01745240643f;
+
+ timer.start();
+
+ glfwPollEvents();
+
+ float meanTime = 0.0f;
+ for (int i = 0; i < 32; ++i) {
+ meanTime += times[i];
+ }
+ meanTime /= 32.f;
+ char outString[64];
+ float fps = 1000.f/meanTime;
+ sprintf(outString, "fps: %f ms: %f", fps, meanTime);
+
+ for (int i = 0; i < kGrid*kGrid+1; ++i) {
+ SkScalar c = xform[i].fSCos;
+ SkScalar s = xform[i].fSSin;
+
+ SkScalar dx = c*anchorX - s*anchorY;
+ SkScalar dy = s*anchorX + c*anchorY;
+
+ xform[i].fSCos = kCosDiff*c - kSinDiff*s;
+ xform[i].fSSin = kSinDiff*c + kCosDiff*s;
+
+ dx -= xform[i].fSCos*anchorX - xform[i].fSSin*anchorY;
+ dy -= xform[i].fSSin*anchorX + xform[i].fSCos*anchorY;
+ xform[i].fTx += dx;
+ xform[i].fTy += dy;
+ }
+
+ canvas->clear(SK_ColorBLACK);
+ canvas->drawAtlas(atlas, xform, tex, nullptr, kGrid*kGrid+1, SkXfermode::kSrcOver_Mode,
+ nullptr, &paint);
+ canvas->drawText(outString, strlen(outString), 100.f, 100.f, paint);
+
+ canvas->flush();
+
+ timer.end();
+ times[currentTime] = (float)(timer.fWall);
+ currentTime = (currentTime + 1) & 0x1f;
+
+ glfwSwapBuffers(window);
+ }
+
+ cleanup_skia();
+
+ glfwDestroyWindow(window);
+ glfwTerminate();
+ exit(EXIT_SUCCESS);
+}