mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Remove glut port now that android glutin has landed.
This commit is contained in:
parent
15187cb451
commit
76c18473b1
26 changed files with 1 additions and 3000 deletions
|
@ -103,7 +103,7 @@ fn redirect_output(file_no: c_int) {
|
||||||
#[cfg(target_os="android")]
|
#[cfg(target_os="android")]
|
||||||
fn setup_logging() {
|
fn setup_logging() {
|
||||||
use libc::consts::os::posix88::{STDERR_FILENO, STDOUT_FILENO};
|
use libc::consts::os::posix88::{STDERR_FILENO, STDOUT_FILENO};
|
||||||
//os::setenv("RUST_LOG", "servo,gfx,msg,util,layers,js,glut,std,rt,extra");
|
//os::setenv("RUST_LOG", "servo,gfx,msg,util,layers,js,std,rt,extra");
|
||||||
redirect_output(STDERR_FILENO);
|
redirect_output(STDERR_FILENO);
|
||||||
redirect_output(STDOUT_FILENO);
|
redirect_output(STDOUT_FILENO);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
[target.arm-linux-androideabi]
|
|
||||||
ar = "arm-linux-androideabi-ar"
|
|
||||||
linker = "arm-linux-androideabi-g++"
|
|
||||||
|
|
||||||
|
|
|
@ -1,41 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- BEGIN_INCLUDE(manifest) -->
|
|
||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
package="com.example.ServoAndroid"
|
|
||||||
android:versionCode="1"
|
|
||||||
android:versionName="1.0">
|
|
||||||
|
|
||||||
<!-- This is the platform API where NativeActivity was introduced. -->
|
|
||||||
<uses-sdk android:minSdkVersion="18"
|
|
||||||
android:targetSdkVersion="18" />
|
|
||||||
<uses-feature android:glEsVersion="0x00020000" android:required="true"></uses-feature>
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
<!-- This .apk has no Java code itself, so set hasCode to false. -->
|
|
||||||
<!-- Add the flag android:debuggable="true" to the application tag to enable use of ndk-gdb -->
|
|
||||||
<application android:label="@string/app_name" android:hasCode="false" android:debuggable="true">
|
|
||||||
|
|
||||||
<!-- Our activity is the built-in NativeActivity framework class.
|
|
||||||
This will take care of integrating with our NDK code. -->
|
|
||||||
<activity android:name="android.app.NativeActivity"
|
|
||||||
android:label="@string/app_name"
|
|
||||||
android:exported="true"
|
|
||||||
android:hasCode="false"
|
|
||||||
android:hardwareAccelerated="true"
|
|
||||||
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
|
|
||||||
android:configChanges="orientation|keyboardHidden">
|
|
||||||
<!-- Tell NativeActivity the name of or .so -->
|
|
||||||
<meta-data android:name="android.app.lib_name"
|
|
||||||
android:value="ServoAndroid" />
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.intent.action.MAIN" />
|
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
|
||||||
</intent-filter>
|
|
||||||
</activity>
|
|
||||||
</application>
|
|
||||||
|
|
||||||
</manifest>
|
|
||||||
<!-- END_INCLUDE(manifest) -->
|
|
|
@ -1,27 +0,0 @@
|
||||||
CARGO_OPTS ?=
|
|
||||||
RUST_ROOT ?= /usr/local
|
|
||||||
|
|
||||||
.PHONY: all
|
|
||||||
all: glut_app
|
|
||||||
NDK_DEBUG=1 $(ANDROID_NDK)/ndk-build -B
|
|
||||||
find glut_app/target ! \( -type d -name dist -prune \) -name libmozjs.so | \
|
|
||||||
xargs -I {} cp -f {} libs/armeabi
|
|
||||||
find glut_app/target ! \( -type d -name dist -prune \) -name 'libglut_app-*.so' | \
|
|
||||||
xargs -I {} cp -f {} libs/armeabi/libservo.so
|
|
||||||
find $(RUST_ROOT)/lib/rustlib/arm-linux-androideabi/lib \
|
|
||||||
-name '*.so' -type f -size +1c | \
|
|
||||||
xargs -I {} cp -f {} libs/armeabi
|
|
||||||
$(ANDROID_SDK)/tools/android update project \
|
|
||||||
--name ServoAndroid \
|
|
||||||
--target "android-18" \
|
|
||||||
--path .
|
|
||||||
ant debug
|
|
||||||
|
|
||||||
.PHONY: glut_app
|
|
||||||
glut_app:
|
|
||||||
cd glut_app; \
|
|
||||||
../../../mach cargo build --target=arm-linux-androideabi $(CARGO_OPTS)
|
|
||||||
|
|
||||||
.PHONY: install
|
|
||||||
install:
|
|
||||||
$(ANDROID_SDK)/platform-tools/adb install -r bin/ServoAndroid-debug.apk
|
|
|
@ -1,92 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project name="ServoAndroid" default="help">
|
|
||||||
|
|
||||||
<!-- The local.properties file is created and updated by the 'android' tool.
|
|
||||||
It contains the path to the SDK. It should *NOT* be checked into
|
|
||||||
Version Control Systems. -->
|
|
||||||
<property file="local.properties" />
|
|
||||||
|
|
||||||
<!-- The ant.properties file can be created by you. It is only edited by the
|
|
||||||
'android' tool to add properties to it.
|
|
||||||
This is the place to change some Ant specific build properties.
|
|
||||||
Here are some properties you may want to change/update:
|
|
||||||
|
|
||||||
source.dir
|
|
||||||
The name of the source directory. Default is 'src'.
|
|
||||||
out.dir
|
|
||||||
The name of the output directory. Default is 'bin'.
|
|
||||||
|
|
||||||
For other overridable properties, look at the beginning of the rules
|
|
||||||
files in the SDK, at tools/ant/build.xml
|
|
||||||
|
|
||||||
Properties related to the SDK location or the project target should
|
|
||||||
be updated using the 'android' tool with the 'update' action.
|
|
||||||
|
|
||||||
This file is an integral part of the build system for your
|
|
||||||
application and should be checked into Version Control Systems.
|
|
||||||
|
|
||||||
-->
|
|
||||||
<property file="ant.properties" />
|
|
||||||
|
|
||||||
<!-- if sdk.dir was not set from one of the property file, then
|
|
||||||
get it from the ANDROID_HOME env var.
|
|
||||||
This must be done before we load project.properties since
|
|
||||||
the proguard config can use sdk.dir -->
|
|
||||||
<property environment="env" />
|
|
||||||
<condition property="sdk.dir" value="${env.ANDROID_HOME}">
|
|
||||||
<isset property="env.ANDROID_HOME" />
|
|
||||||
</condition>
|
|
||||||
|
|
||||||
<!-- The project.properties file is created and updated by the 'android'
|
|
||||||
tool, as well as ADT.
|
|
||||||
|
|
||||||
This contains project specific properties such as project target, and library
|
|
||||||
dependencies. Lower level build properties are stored in ant.properties
|
|
||||||
(or in .classpath for Eclipse projects).
|
|
||||||
|
|
||||||
This file is an integral part of the build system for your
|
|
||||||
application and should be checked into Version Control Systems. -->
|
|
||||||
<loadproperties srcFile="project.properties" />
|
|
||||||
|
|
||||||
<!-- quick check on sdk.dir -->
|
|
||||||
<fail
|
|
||||||
message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable."
|
|
||||||
unless="sdk.dir"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<!--
|
|
||||||
Import per project custom build rules if present at the root of the project.
|
|
||||||
This is the place to put custom intermediary targets such as:
|
|
||||||
-pre-build
|
|
||||||
-pre-compile
|
|
||||||
-post-compile (This is typically used for code obfuscation.
|
|
||||||
Compiled code location: ${out.classes.absolute.dir}
|
|
||||||
If this is not done in place, override ${out.dex.input.absolute.dir})
|
|
||||||
-post-package
|
|
||||||
-post-build
|
|
||||||
-pre-clean
|
|
||||||
-->
|
|
||||||
<import file="custom_rules.xml" optional="true" />
|
|
||||||
|
|
||||||
<!-- Import the actual build file.
|
|
||||||
|
|
||||||
To customize existing targets, there are two options:
|
|
||||||
- Customize only one target:
|
|
||||||
- copy/paste the target into this file, *before* the
|
|
||||||
<import> task.
|
|
||||||
- customize it to your needs.
|
|
||||||
- Customize the whole content of build.xml
|
|
||||||
- copy/paste the content of the rules files (minus the top node)
|
|
||||||
into this file, replacing the <import> task.
|
|
||||||
- customize to your needs.
|
|
||||||
|
|
||||||
***********************
|
|
||||||
****** IMPORTANT ******
|
|
||||||
***********************
|
|
||||||
In all cases you must update the value of version-tag below to read 'custom' instead of an integer,
|
|
||||||
in order to avoid having your file be overridden by tools such as "android update project"
|
|
||||||
-->
|
|
||||||
<!-- version-tag: 1 -->
|
|
||||||
<import file="${sdk.dir}/tools/ant/build.xml" />
|
|
||||||
|
|
||||||
</project>
|
|
2
ports/android/glut_app/.gitignore
vendored
2
ports/android/glut_app/.gitignore
vendored
|
@ -1,2 +0,0 @@
|
||||||
/target
|
|
||||||
|
|
644
ports/android/glut_app/Cargo.lock
generated
644
ports/android/glut_app/Cargo.lock
generated
|
@ -1,644 +0,0 @@
|
||||||
[root]
|
|
||||||
name = "glut_app"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"compositing 0.0.1",
|
|
||||||
"egl 0.1.0 (git+https://github.com/servo/rust-egl)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"glut 0.0.1 (git+https://github.com/servo/rust-glut)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"servo 0.0.1",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "azure"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-azure#e8323588209b47a07b67f61812c75dfeb2ad6851"
|
|
||||||
dependencies = [
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics)",
|
|
||||||
"core_text 0.1.0 (git+https://github.com/servo/rust-core-text)",
|
|
||||||
"egl 0.1.0 (git+https://github.com/servo/rust-egl)",
|
|
||||||
"freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"skia-sys 0.0.20130412 (git+https://github.com/servo/skia?ref=upstream-2014-06-16)",
|
|
||||||
"xlib 0.1.0 (git+https://github.com/servo/rust-xlib)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "canvas"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"azure 0.1.0 (git+https://github.com/servo/rust-azure)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cgl"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/rust-cgl#7b7090729f65e2287c3d80651df02e547911b119"
|
|
||||||
dependencies = [
|
|
||||||
"gleam 0.0.1 (git+https://github.com/servo/gleam)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "compositing"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"azure 0.1.0 (git+https://github.com/servo/rust-azure)",
|
|
||||||
"core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics)",
|
|
||||||
"core_text 0.1.0 (git+https://github.com/servo/rust-core-text)",
|
|
||||||
"devtools 0.0.1",
|
|
||||||
"devtools_traits 0.0.1",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"gfx 0.0.1",
|
|
||||||
"gleam 0.0.1 (git+https://github.com/servo/gleam)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"layout_traits 0.0.1",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"png 0.1.0 (git+https://github.com/servo/rust-png)",
|
|
||||||
"script_traits 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cookie"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/cookie-rs#30520767a95b92e39265aaf6822db515b2418f1d"
|
|
||||||
dependencies = [
|
|
||||||
"openssl 0.0.1 (git+https://github.com/servo/rust-openssl)",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core_foundation"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-core-foundation#6fa0b908f3912e20d081193e83bf5a9aa958fb83"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core_graphics"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-core-graphics#9434e2bda65d259f825104170b5fa6cc6dbaf5a9"
|
|
||||||
dependencies = [
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "core_text"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-core-text#85784007b6fa1b8f9614059edcd0429b2bd69a11"
|
|
||||||
dependencies = [
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "cssparser"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-cssparser#cbbfd66f794bd019bbdeaefc88b29eff455b62e5"
|
|
||||||
dependencies = [
|
|
||||||
"encoding 0.2.0 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "devtools"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"devtools_traits 0.0.1",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "devtools_traits"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"msg 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "egl"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-egl#88f2a13812ddbce2bf2317221663a61c31b3e220"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding"
|
|
||||||
version = "0.2.0"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
dependencies = [
|
|
||||||
"encoding-index-japanese 1.0.20140915 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"encoding-index-korean 1.0.20140915 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"encoding-index-simpchinese 1.0.20140915 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"encoding-index-singlebyte 1.0.20140915 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"encoding-index-tradchinese 1.0.20140915 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding-index-japanese"
|
|
||||||
version = "1.0.20140915"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding-index-korean"
|
|
||||||
version = "1.0.20140915"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding-index-simpchinese"
|
|
||||||
version = "1.0.20140915"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding-index-singlebyte"
|
|
||||||
version = "1.0.20140915"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "encoding-index-tradchinese"
|
|
||||||
version = "1.0.20140915"
|
|
||||||
source = "git+https://github.com/lifthrasiir/rust-encoding#a06637cc6d0da37c12c68661e2ee9ca1999764a4"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "expat-sys"
|
|
||||||
version = "2.1.0"
|
|
||||||
source = "git+https://github.com/servo/libexpat#da2ddaf78cbef836b8790807bb76b357c58df3a1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fontconfig"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-fontconfig#f42ff5cbd0404fe4d2cd64e8d9bb6307bad8fd7c"
|
|
||||||
dependencies = [
|
|
||||||
"fontconfig-sys 2.11.1 (git+https://github.com/servo/libfontconfig)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fontconfig-sys"
|
|
||||||
version = "2.11.1"
|
|
||||||
source = "git+https://github.com/servo/libfontconfig#fcc324d2c8175d2e8e8c0aab032c03a404809f6d"
|
|
||||||
dependencies = [
|
|
||||||
"expat-sys 2.1.0 (git+https://github.com/servo/libexpat)",
|
|
||||||
"freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "freetype"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-freetype#e55b06110fb2d74a2db68ead740db7e98fb98060"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "freetype-sys"
|
|
||||||
version = "2.4.11"
|
|
||||||
source = "git+https://github.com/servo/libfreetype2#f5c49c0da1d5bc6b206c4176344012ac37524243"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "geom"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-geom#95e746133b4a35b53eb259304668b63ee8de42b8"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gfx"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"azure 0.1.0 (git+https://github.com/servo/rust-azure)",
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"core_graphics 0.1.0 (git+https://github.com/servo/rust-core-graphics)",
|
|
||||||
"core_text 0.1.0 (git+https://github.com/servo/rust-core-text)",
|
|
||||||
"fontconfig 0.1.0 (git+https://github.com/servo/rust-fontconfig)",
|
|
||||||
"freetype 0.1.0 (git+https://github.com/servo/rust-freetype)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"harfbuzz 0.1.0 (git+https://github.com/servo/rust-harfbuzz)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"plugins 0.0.1",
|
|
||||||
"png 0.1.0 (git+https://github.com/servo/rust-png)",
|
|
||||||
"script_traits 0.0.1",
|
|
||||||
"stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image)",
|
|
||||||
"style 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gl_common"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/bjz/gl-rs.git#79cd3b3f9f19aa0e39f6af572fc8673a6d9760bc"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gl_generator"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/bjz/gl-rs.git#79cd3b3f9f19aa0e39f6af572fc8673a6d9760bc"
|
|
||||||
dependencies = [
|
|
||||||
"gl_common 0.0.1 (git+https://github.com/bjz/gl-rs.git)",
|
|
||||||
"khronos_api 0.0.1 (git+https://github.com/bjz/gl-rs.git)",
|
|
||||||
"rust-xml 0.1.0 (git+https://github.com/netvl/rust-xml)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "gleam"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/gleam#aaea38be25ce9de6e1e8620fa5b554669ac6475c"
|
|
||||||
dependencies = [
|
|
||||||
"gl_generator 0.0.1 (git+https://github.com/bjz/gl-rs.git)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "glut"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/rust-glut#63aa09161b6b2a8c5daac91449d1fc3b0c3e665f"
|
|
||||||
dependencies = [
|
|
||||||
"opengles 0.1.0 (git+https://github.com/servo/rust-opengles)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "glx"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/rust-glx#7126ffa09fcfcc9f85f1406f3b5db729f5fdb7c3"
|
|
||||||
dependencies = [
|
|
||||||
"gl_generator 0.0.1 (git+https://github.com/bjz/gl-rs.git)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "harfbuzz"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-harfbuzz#8aab215463214647b7a81f66011da552bbb1121c"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "html5ever"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/servo/html5ever?ref=servo#87c7e8b710391338b2463652be835f498923653c"
|
|
||||||
dependencies = [
|
|
||||||
"html5ever_macros 0.0.0 (git+https://github.com/servo/html5ever?ref=servo)",
|
|
||||||
"phf 0.0.0 (git+https://github.com/sfackler/rust-phf)",
|
|
||||||
"phf_mac 0.0.0 (git+https://github.com/sfackler/rust-phf)",
|
|
||||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "html5ever_macros"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/servo/html5ever?ref=servo#87c7e8b710391338b2463652be835f498923653c"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "hyper"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/hyper?ref=servo#dd9d1830f35f7a8371b1b3bcb2d3e9cf2763f33f"
|
|
||||||
dependencies = [
|
|
||||||
"cookie 0.0.1 (git+https://github.com/servo/cookie-rs)",
|
|
||||||
"mime 0.0.1 (git+https://github.com/hyperium/mime.rs)",
|
|
||||||
"move-acceptor 0.0.1 (git+https://github.com/reem/rust-move-acceptor)",
|
|
||||||
"openssl 0.0.1 (git+https://github.com/servo/rust-openssl)",
|
|
||||||
"typeable 0.0.3 (git+https://github.com/reem/rust-typeable)",
|
|
||||||
"unsafe-any 0.1.0 (git+https://github.com/reem/rust-unsafe-any)",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "io_surface"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-io-surface#691cbccc320c4fb9b75e215da9b0b82539d729bd"
|
|
||||||
dependencies = [
|
|
||||||
"cgl 0.0.1 (git+https://github.com/servo/rust-cgl)",
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"gleam 0.0.1 (git+https://github.com/servo/gleam)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "js"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-mozjs#7563bbd5abf12a1f0d01661c525b1f2491f783a9"
|
|
||||||
dependencies = [
|
|
||||||
"mozjs-sys 0.0.0 (git+https://github.com/servo/mozjs)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "khronos_api"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/bjz/gl-rs.git#79cd3b3f9f19aa0e39f6af572fc8673a6d9760bc"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "layers"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-layers#63d1093f2a01a6fb9599ea6d932aadf79598451f"
|
|
||||||
dependencies = [
|
|
||||||
"cgl 0.0.1 (git+https://github.com/servo/rust-cgl)",
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"egl 0.1.0 (git+https://github.com/servo/rust-egl)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"gleam 0.0.1 (git+https://github.com/servo/gleam)",
|
|
||||||
"glx 0.0.1 (git+https://github.com/servo/rust-glx)",
|
|
||||||
"io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface)",
|
|
||||||
"xlib 0.1.0 (git+https://github.com/servo/rust-xlib)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "layout"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"encoding 0.2.0 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"gfx 0.0.1",
|
|
||||||
"layout_traits 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"plugins 0.0.1",
|
|
||||||
"script 0.0.1",
|
|
||||||
"script_traits 0.0.1",
|
|
||||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"style 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "layout_traits"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"gfx 0.0.1",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"script_traits 0.0.1",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "lazy_static"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/Kimundi/lazy-static.rs#62976cb611c5396e11315ae64c9c389576240eb7"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "libressl-pnacl-sys"
|
|
||||||
version = "2.0.2"
|
|
||||||
source = "git+https://github.com/DiamondLovesYou/libressl-pnacl-sys.git#8e9349e0280b069bfab247a2202cd10b8beae154"
|
|
||||||
dependencies = [
|
|
||||||
"pnacl-build-helper 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mime"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/hyperium/mime.rs#5264e04655974f85c8d6581395cc24597266c653"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "move-acceptor"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/reem/rust-move-acceptor#25c5c33a83f605fdd0f3d37d2589e2b0b4e6cbd1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "mozjs-sys"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/servo/mozjs#0dd618fcc78fe7aa64e4e2a3b0f7f0d8a2f0f08a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "msg"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"azure 0.1.0 (git+https://github.com/servo/rust-azure)",
|
|
||||||
"core_foundation 0.1.0 (git+https://github.com/servo/rust-core-foundation)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"hyper 0.0.1 (git+https://github.com/servo/hyper?ref=servo)",
|
|
||||||
"io_surface 0.1.0 (git+https://github.com/servo/rust-io-surface)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "net"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"hyper 0.0.1 (git+https://github.com/servo/hyper?ref=servo)",
|
|
||||||
"png 0.1.0 (git+https://github.com/servo/rust-png)",
|
|
||||||
"stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image)",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "opengles"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-opengles#7f025f0069fbf6fefef4ed383b9be120584f2ab5"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/rust-openssl#82b520100532dba9a4cdd4588709eaedb37c7a77"
|
|
||||||
dependencies = [
|
|
||||||
"libressl-pnacl-sys 2.0.2 (git+https://github.com/DiamondLovesYou/libressl-pnacl-sys.git)",
|
|
||||||
"openssl-sys 0.0.1 (git+https://github.com/servo/rust-openssl)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "openssl-sys"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/servo/rust-openssl#82b520100532dba9a4cdd4588709eaedb37c7a77"
|
|
||||||
dependencies = [
|
|
||||||
"pkg-config 0.1.0 (git+https://github.com/alexcrichton/pkg-config-rs)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "phf"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/sfackler/rust-phf#18a5ecc028055c3dbd650cc5a064b6fb033d82ef"
|
|
||||||
dependencies = [
|
|
||||||
"xxhash 0.0.1 (git+https://github.com/Jurily/rust-xxhash)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "phf_mac"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/sfackler/rust-phf#18a5ecc028055c3dbd650cc5a064b6fb033d82ef"
|
|
||||||
dependencies = [
|
|
||||||
"xxhash 0.0.1 (git+https://github.com/Jurily/rust-xxhash)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pkg-config"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/alexcrichton/pkg-config-rs#9b3b44a2e1a8ccc70c3f701aeb5154ad79e665e9"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "plugins"
|
|
||||||
version = "0.0.1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "pnacl-build-helper"
|
|
||||||
version = "1.0.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "png"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-png#b0b4acde0080dd475dee93615276bfc19207a21e"
|
|
||||||
dependencies = [
|
|
||||||
"png-sys 1.6.3 (git+https://github.com/servo/libpng?ref=servo)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "png-sys"
|
|
||||||
version = "1.6.3"
|
|
||||||
source = "git+https://github.com/servo/libpng?ref=servo#d01f32b4eb86904695efe7fc02b574f902e21a98"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "rust-xml"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/netvl/rust-xml#d6c57380a300b94f7e7881979dbe5459dbe4ca06"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "script"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"canvas 0.0.1",
|
|
||||||
"cssparser 0.1.0 (git+https://github.com/servo/rust-cssparser)",
|
|
||||||
"devtools_traits 0.0.1",
|
|
||||||
"encoding 0.2.0 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"gfx 0.0.1",
|
|
||||||
"html5ever 0.0.0 (git+https://github.com/servo/html5ever?ref=servo)",
|
|
||||||
"hyper 0.0.1 (git+https://github.com/servo/hyper?ref=servo)",
|
|
||||||
"js 0.1.0 (git+https://github.com/servo/rust-mozjs)",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"plugins 0.0.1",
|
|
||||||
"script_traits 0.0.1",
|
|
||||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"style 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
"uuid 0.0.1 (git+https://github.com/rust-lang/uuid)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "script_traits"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"devtools_traits 0.0.1",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "servo"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"compositing 0.0.1",
|
|
||||||
"gfx 0.0.1",
|
|
||||||
"layout 0.0.1",
|
|
||||||
"msg 0.0.1",
|
|
||||||
"net 0.0.1",
|
|
||||||
"script 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "skia-sys"
|
|
||||||
version = "0.0.20130412"
|
|
||||||
source = "git+https://github.com/servo/skia?ref=upstream-2014-06-16#35649d0cddfd89c0bfee0ff558da7291e26d30c3"
|
|
||||||
dependencies = [
|
|
||||||
"expat-sys 2.1.0 (git+https://github.com/servo/libexpat)",
|
|
||||||
"freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "stb_image"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-stb-image#74488fef4740acf287ff5dc248d65cc74033467a"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "string_cache"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/servo/string-cache#ae950525434b642eff5f4904f5e0c76cd6ea99b9"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static 0.1.0 (git+https://github.com/Kimundi/lazy-static.rs)",
|
|
||||||
"phf 0.0.0 (git+https://github.com/sfackler/rust-phf)",
|
|
||||||
"phf_mac 0.0.0 (git+https://github.com/sfackler/rust-phf)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"xxhash 0.0.1 (git+https://github.com/Jurily/rust-xxhash)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "string_cache_macros"
|
|
||||||
version = "0.0.0"
|
|
||||||
source = "git+https://github.com/servo/string-cache#ae950525434b642eff5f4904f5e0c76cd6ea99b9"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static 0.1.0 (git+https://github.com/Kimundi/lazy-static.rs)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "style"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"cssparser 0.1.0 (git+https://github.com/servo/rust-cssparser)",
|
|
||||||
"encoding 0.2.0 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"lazy_static 0.1.0 (git+https://github.com/Kimundi/lazy-static.rs)",
|
|
||||||
"plugins 0.0.1",
|
|
||||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
"util 0.0.1",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "task_info"
|
|
||||||
version = "0.0.1"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "typeable"
|
|
||||||
version = "0.0.3"
|
|
||||||
source = "git+https://github.com/reem/rust-typeable#db8975daaa3889871f67eea11baeaefd8e706eaf"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "unsafe-any"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/reem/rust-unsafe-any#2863af363bbd83079b6773920bba5b736408db33"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "url"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-url#8a61b7654ab5378b488225a1d8a9cbbbcbd38894"
|
|
||||||
dependencies = [
|
|
||||||
"encoding 0.2.0 (git+https://github.com/lifthrasiir/rust-encoding)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "util"
|
|
||||||
version = "0.0.1"
|
|
||||||
dependencies = [
|
|
||||||
"geom 0.1.0 (git+https://github.com/servo/rust-geom)",
|
|
||||||
"layers 0.1.0 (git+https://github.com/servo/rust-layers)",
|
|
||||||
"string_cache 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"string_cache_macros 0.0.0 (git+https://github.com/servo/string-cache)",
|
|
||||||
"task_info 0.0.1",
|
|
||||||
"url 0.1.0 (git+https://github.com/servo/rust-url)",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "uuid"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/rust-lang/uuid#7c5af48d4f9074717199e05a1895f42b9fb1c1f0"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "xlib"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "git+https://github.com/servo/rust-xlib#58ec3847b592aeabdcfeb6a2d02033d3a2c7f427"
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "xxhash"
|
|
||||||
version = "0.0.1"
|
|
||||||
source = "git+https://github.com/Jurily/rust-xxhash#7e4174e780af0cfb29a5e53ede0b987adca16396"
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
[package]
|
|
||||||
name = "glut_app"
|
|
||||||
version = "0.0.1"
|
|
||||||
authors = ["The Servo Project Developers"]
|
|
||||||
|
|
||||||
[lib]
|
|
||||||
name = "glut_app"
|
|
||||||
path = "lib.rs"
|
|
||||||
crate-type = ["dylib"]
|
|
||||||
|
|
||||||
[dependencies.compositing]
|
|
||||||
path = "../../../components/compositing"
|
|
||||||
|
|
||||||
[dependencies.geom]
|
|
||||||
git = "https://github.com/servo/rust-geom"
|
|
||||||
|
|
||||||
[dependencies.glut]
|
|
||||||
git = "https://github.com/servo/rust-glut"
|
|
||||||
|
|
||||||
[dependencies.layers]
|
|
||||||
git = "https://github.com/servo/rust-layers"
|
|
||||||
|
|
||||||
[dependencies.msg]
|
|
||||||
path = "../../../components/msg"
|
|
||||||
|
|
||||||
[dependencies.servo]
|
|
||||||
path = "../../../components/servo"
|
|
||||||
default-features = false
|
|
||||||
|
|
||||||
[dependencies.util]
|
|
||||||
path = "../../../components/util"
|
|
||||||
|
|
||||||
[dependencies.egl]
|
|
||||||
git = "https://github.com/servo/rust-egl"
|
|
|
@ -1,65 +0,0 @@
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//! A simple application that uses GLUT to open a window for Servo to display in.
|
|
||||||
|
|
||||||
#![license = "MPL"]
|
|
||||||
#![feature(macro_rules, phase)]
|
|
||||||
#![deny(unused_imports)]
|
|
||||||
#![deny(unused_variables)]
|
|
||||||
|
|
||||||
extern crate compositing;
|
|
||||||
extern crate egl;
|
|
||||||
extern crate geom;
|
|
||||||
extern crate glut;
|
|
||||||
extern crate layers;
|
|
||||||
extern crate libc;
|
|
||||||
#[phase(plugin, link)] extern crate log;
|
|
||||||
extern crate msg;
|
|
||||||
extern crate native;
|
|
||||||
extern crate servo;
|
|
||||||
#[phase(plugin, link)] extern crate util;
|
|
||||||
|
|
||||||
use geom::scale_factor::ScaleFactor;
|
|
||||||
use std::rc::Rc;
|
|
||||||
use std::string;
|
|
||||||
use util::opts;
|
|
||||||
use window::Window;
|
|
||||||
|
|
||||||
use glut::glut::{init, init_display_mode, DOUBLE};
|
|
||||||
|
|
||||||
mod window;
|
|
||||||
|
|
||||||
pub fn create_window() -> Rc<Window> {
|
|
||||||
// Initialize GLUT.
|
|
||||||
init();
|
|
||||||
init_display_mode(DOUBLE);
|
|
||||||
|
|
||||||
// Read command-line options.
|
|
||||||
let scale_factor = opts::get().device_pixels_per_px.unwrap_or(ScaleFactor(1.0));
|
|
||||||
let size = opts::get().initial_window_size.as_f32() * scale_factor;
|
|
||||||
|
|
||||||
// Open a window.
|
|
||||||
Window::new(size.as_uint())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[no_mangle]
|
|
||||||
#[allow(dead_code)]
|
|
||||||
pub extern "C" fn android_start(argc: int, argv: *const *const u8) -> int {
|
|
||||||
native::start(argc, argv, proc() {
|
|
||||||
let mut args: Vec<String> = vec!();
|
|
||||||
for i in range(0u, argc as uint) {
|
|
||||||
unsafe {
|
|
||||||
args.push(string::raw::from_buf(*argv.offset(i as int) as *const u8));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if opts::from_cmdline_args(args.as_slice()) {
|
|
||||||
let window = create_window();
|
|
||||||
let mut browser = servo::Browser::new(Some(window.clone()));
|
|
||||||
while browser.handle_event(window.wait_events()) {}
|
|
||||||
browser.shutdown();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -1,330 +0,0 @@
|
||||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
||||||
|
|
||||||
//! A windowing implementation using GLUT.
|
|
||||||
|
|
||||||
use compositing::compositor_task::{mod, CompositorProxy, CompositorReceiver};
|
|
||||||
use compositing::windowing::{WindowEvent, WindowMethods};
|
|
||||||
use compositing::windowing::{IdleWindowEvent, ResizeWindowEvent, MouseWindowEventClass};
|
|
||||||
use compositing::windowing::{ScrollWindowEvent, ZoomWindowEvent, NavigationWindowEvent};
|
|
||||||
use compositing::windowing::{MouseWindowClickEvent, MouseWindowMouseDownEvent, MouseWindowMouseUpEvent};
|
|
||||||
use compositing::windowing::{Forward, Back};
|
|
||||||
|
|
||||||
use libc::{c_int, c_uchar};
|
|
||||||
use std::cell::{Cell, RefCell};
|
|
||||||
use std::rc::Rc;
|
|
||||||
use geom::point::{Point2D, TypedPoint2D};
|
|
||||||
use geom::scale_factor::ScaleFactor;
|
|
||||||
use geom::size::TypedSize2D;
|
|
||||||
use layers::geometry::DevicePixel;
|
|
||||||
use layers::platform::surface::NativeGraphicsMetadata;
|
|
||||||
use msg::compositor_msg::{Blank, IdlePaintState, PaintState, ReadyState};
|
|
||||||
use msg::constellation_msg::LoadData;
|
|
||||||
use util::geometry::ScreenPx;
|
|
||||||
|
|
||||||
use glut::glut::{ACTIVE_SHIFT, WindowHeight};
|
|
||||||
use glut::glut::WindowWidth;
|
|
||||||
use glut::glut;
|
|
||||||
|
|
||||||
// static THROBBER: [char, ..8] = [ '⣾', '⣽', '⣻', '⢿', '⡿', '⣟', '⣯', '⣷' ];
|
|
||||||
|
|
||||||
/// The type of a window.
|
|
||||||
pub struct Window {
|
|
||||||
pub glut_window: glut::Window,
|
|
||||||
|
|
||||||
pub event_queue: RefCell<Vec<WindowEvent>>,
|
|
||||||
|
|
||||||
pub drag_origin: Point2D<c_int>,
|
|
||||||
|
|
||||||
pub mouse_down_button: Cell<c_int>,
|
|
||||||
pub mouse_down_point: Cell<Point2D<c_int>>,
|
|
||||||
|
|
||||||
pub ready_state: Cell<ReadyState>,
|
|
||||||
pub paint_state: Cell<PaintState>,
|
|
||||||
pub throbber_frame: Cell<u8>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Window {
|
|
||||||
/// Creates a new window.
|
|
||||||
pub fn new(size: TypedSize2D<DevicePixel, uint>) -> Rc<Window> {
|
|
||||||
// Create the GLUT window.
|
|
||||||
let window_size = size.to_untyped();
|
|
||||||
glut::init_window_size(window_size.width, window_size.height);
|
|
||||||
let glut_window = glut::create_window("Servo".to_string());
|
|
||||||
|
|
||||||
// Create our window object.
|
|
||||||
let window = Window {
|
|
||||||
glut_window: glut_window,
|
|
||||||
|
|
||||||
event_queue: RefCell::new(vec!()),
|
|
||||||
|
|
||||||
drag_origin: Point2D(0 as c_int, 0),
|
|
||||||
|
|
||||||
mouse_down_button: Cell::new(0),
|
|
||||||
mouse_down_point: Cell::new(Point2D(0 as c_int, 0)),
|
|
||||||
|
|
||||||
ready_state: Cell::new(Blank),
|
|
||||||
paint_state: Cell::new(IdlePaintState),
|
|
||||||
throbber_frame: Cell::new(0),
|
|
||||||
};
|
|
||||||
|
|
||||||
// Register event handlers.
|
|
||||||
|
|
||||||
//Added dummy display callback to freeglut. According to freeglut ref, we should register some kind of display callback after freeglut 3.0.
|
|
||||||
|
|
||||||
struct DisplayCallbackState;
|
|
||||||
impl glut::DisplayCallback for DisplayCallbackState {
|
|
||||||
fn call(&self) {
|
|
||||||
debug!("GLUT display func registgered");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glut::display_func(box DisplayCallbackState);
|
|
||||||
struct ReshapeCallbackState;
|
|
||||||
impl glut::ReshapeCallback for ReshapeCallbackState {
|
|
||||||
fn call(&self, width: c_int, height: c_int) {
|
|
||||||
let tmp = local_window();
|
|
||||||
tmp.event_queue.borrow_mut().push(ResizeWindowEvent(TypedSize2D(width as uint, height as uint)))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glut::reshape_func(glut_window, box ReshapeCallbackState);
|
|
||||||
struct KeyboardCallbackState;
|
|
||||||
impl glut::KeyboardCallback for KeyboardCallbackState {
|
|
||||||
fn call(&self, key: c_uchar, _x: c_int, _y: c_int) {
|
|
||||||
let tmp = local_window();
|
|
||||||
tmp.handle_key(key)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glut::keyboard_func(box KeyboardCallbackState);
|
|
||||||
struct MouseCallbackState;
|
|
||||||
impl glut::MouseCallback for MouseCallbackState {
|
|
||||||
fn call(&self, button: c_int, state: c_int, x: c_int, y: c_int) {
|
|
||||||
if button < 3 {
|
|
||||||
let tmp = local_window();
|
|
||||||
tmp.handle_mouse(button, state, x, y);
|
|
||||||
} else {
|
|
||||||
match button {
|
|
||||||
3 => {
|
|
||||||
let tmp = local_window();
|
|
||||||
tmp.event_queue.borrow_mut().push(ScrollWindowEvent(
|
|
||||||
TypedPoint2D(0.0f32, 5.0f32),
|
|
||||||
TypedPoint2D(0i32, 5i32)));
|
|
||||||
},
|
|
||||||
4 => {
|
|
||||||
let tmp = local_window();
|
|
||||||
tmp.event_queue.borrow_mut().push(ScrollWindowEvent(
|
|
||||||
TypedPoint2D(0.0f32, -5.0f32),
|
|
||||||
TypedPoint2D(0i32, -5i32)));
|
|
||||||
},
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glut::mouse_func(box MouseCallbackState);
|
|
||||||
|
|
||||||
let wrapped_window = Rc::new(window);
|
|
||||||
|
|
||||||
install_local_window(wrapped_window.clone());
|
|
||||||
|
|
||||||
wrapped_window
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn wait_events(&self) -> WindowEvent {
|
|
||||||
if !self.event_queue.borrow_mut().is_empty() {
|
|
||||||
return self.event_queue.borrow_mut().remove(0).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
// XXX: Need a function that blocks waiting for events, like glfwWaitEvents.
|
|
||||||
glut::check_loop();
|
|
||||||
|
|
||||||
self.event_queue.borrow_mut().remove(0).unwrap_or(IdleWindowEvent)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Drop for Window {
|
|
||||||
fn drop(&mut self) {
|
|
||||||
drop_local_window();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl WindowMethods for Window {
|
|
||||||
/// Returns the size of the window in hardware pixels.
|
|
||||||
fn framebuffer_size(&self) -> TypedSize2D<DevicePixel, uint> {
|
|
||||||
TypedSize2D(glut::get(WindowWidth) as uint, glut::get(WindowHeight) as uint)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns the size of the window in density-independent "px" units.
|
|
||||||
fn size(&self) -> TypedSize2D<ScreenPx, f32> {
|
|
||||||
self.framebuffer_size().as_f32() / self.hidpi_factor()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Presents the window to the screen (perhaps by page flipping).
|
|
||||||
fn present(&self) {
|
|
||||||
glut::swap_buffers();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn create_compositor_channel(_: &Option<Rc<Window>>)
|
|
||||||
-> (Box<CompositorProxy+Send>, Box<CompositorReceiver>) {
|
|
||||||
let (sender, receiver) = channel();
|
|
||||||
(box GlutCompositorProxy {
|
|
||||||
sender: sender,
|
|
||||||
} as Box<CompositorProxy+Send>,
|
|
||||||
box receiver as Box<CompositorReceiver>)
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sets the ready state.
|
|
||||||
fn set_ready_state(&self, ready_state: ReadyState) {
|
|
||||||
self.ready_state.set(ready_state);
|
|
||||||
// FIXME: set_window_title causes crash with Android version of freeGLUT. Temporarily
|
|
||||||
// blocked.
|
|
||||||
//
|
|
||||||
// self.update_window_title()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Sets the paint state.
|
|
||||||
fn set_paint_state(&self, paint_state: PaintState) {
|
|
||||||
self.paint_state.set(paint_state);
|
|
||||||
// FIXME: set_window_title causes crash with Android version of freeGLUT. Temporarily
|
|
||||||
// blocked.
|
|
||||||
//
|
|
||||||
// self.update_window_title()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn hidpi_factor(&self) -> ScaleFactor<ScreenPx, DevicePixel, f32> {
|
|
||||||
// FIXME: Do nothing in GLUT now.
|
|
||||||
ScaleFactor(1.0)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn native_metadata(&self) -> NativeGraphicsMetadata {
|
|
||||||
use egl::egl::GetCurrentDisplay;
|
|
||||||
NativeGraphicsMetadata {
|
|
||||||
display: GetCurrentDisplay(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn set_page_title(&self, _: Option<String>) {
|
|
||||||
// TODO(pcwalton)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn set_page_load_data(&self, _: LoadData) {
|
|
||||||
// TODO(pcwalton)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn load_end(&self) {
|
|
||||||
// TODO(pcwalton)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn prepare_for_composite(&self) -> bool {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Window {
|
|
||||||
/// Helper function to set the window title in accordance with the ready state.
|
|
||||||
// fn update_window_title(&self) {
|
|
||||||
// let throbber = THROBBER[self.throbber_frame];
|
|
||||||
// match self.ready_state {
|
|
||||||
// Blank => {
|
|
||||||
// glut::set_window_title(self.glut_window, "Blank")
|
|
||||||
// }
|
|
||||||
// Loading => {
|
|
||||||
// glut::set_window_title(self.glut_window, format!("{:c} Loading . Servo", throbber))
|
|
||||||
// }
|
|
||||||
// PerformingLayout => {
|
|
||||||
// glut::set_window_title(self.glut_window, format!("{:c} Performing Layout . Servo", throbber))
|
|
||||||
// }
|
|
||||||
// FinishedLoading => {
|
|
||||||
// match self.paint_state {
|
|
||||||
// PaintingPaintState => {
|
|
||||||
// glut::set_window_title(self.glut_window, format!("{:c} Rendering . Servo", throbber))
|
|
||||||
// }
|
|
||||||
// IdlePaintState => glut::set_window_title(self.glut_window, "Servo"),
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
/// Helper function to handle keyboard events.
|
|
||||||
fn handle_key(&self, key: u8) {
|
|
||||||
debug!("got key: {}", key);
|
|
||||||
let modifiers = glut::get_modifiers();
|
|
||||||
match key {
|
|
||||||
43 => self.event_queue.borrow_mut().push(ZoomWindowEvent(1.1)),
|
|
||||||
45 => self.event_queue.borrow_mut().push(ZoomWindowEvent(0.909090909)),
|
|
||||||
56 => self.event_queue.borrow_mut().push(ScrollWindowEvent(TypedPoint2D(0.0f32, 5.0f32),
|
|
||||||
TypedPoint2D(0i32, 5i32))),
|
|
||||||
50 => self.event_queue.borrow_mut().push(ScrollWindowEvent(TypedPoint2D(0.0f32, -5.0f32),
|
|
||||||
TypedPoint2D(0i32, -5i32))),
|
|
||||||
127 => {
|
|
||||||
if (modifiers & ACTIVE_SHIFT) != 0 {
|
|
||||||
self.event_queue.borrow_mut().push(NavigationWindowEvent(Forward));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
self.event_queue.borrow_mut().push(NavigationWindowEvent(Back));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Helper function to handle a click
|
|
||||||
fn handle_mouse(&self, button: c_int, state: c_int, x: c_int, y: c_int) {
|
|
||||||
// FIXME(tkuehn): max pixel dist should be based on pixel density
|
|
||||||
let max_pixel_dist = 10f32;
|
|
||||||
let event = match state {
|
|
||||||
glut::MOUSE_DOWN => {
|
|
||||||
self.mouse_down_point.set(Point2D(x, y));
|
|
||||||
self.mouse_down_button.set(button);
|
|
||||||
MouseWindowMouseDownEvent(button as uint, TypedPoint2D(x as f32, y as f32))
|
|
||||||
}
|
|
||||||
glut::MOUSE_UP => {
|
|
||||||
if self.mouse_down_button.get() == button {
|
|
||||||
let pixel_dist = self.mouse_down_point.get() - Point2D(x, y);
|
|
||||||
let pixel_dist = ((pixel_dist.x * pixel_dist.x +
|
|
||||||
pixel_dist.y * pixel_dist.y) as f32).sqrt();
|
|
||||||
if pixel_dist < max_pixel_dist {
|
|
||||||
let click_event = MouseWindowClickEvent(button as uint,
|
|
||||||
TypedPoint2D(x as f32, y as f32));
|
|
||||||
self.event_queue.borrow_mut().push(MouseWindowEventClass(click_event));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MouseWindowMouseUpEvent(button as uint, TypedPoint2D(x as f32, y as f32))
|
|
||||||
}
|
|
||||||
_ => panic!("I cannot recognize the type of mouse action that occured. :-(")
|
|
||||||
};
|
|
||||||
self.event_queue.borrow_mut().push(MouseWindowEventClass(event));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
struct GlutCompositorProxy {
|
|
||||||
sender: Sender<compositor_task::Msg>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl CompositorProxy for GlutCompositorProxy {
|
|
||||||
fn send(&mut self, msg: compositor_task::Msg) {
|
|
||||||
// Send a message and kick the OS event loop awake.
|
|
||||||
self.sender.send(msg);
|
|
||||||
// XXX: Need a way to unblock wait_events, like glfwPostEmptyEvent
|
|
||||||
}
|
|
||||||
fn clone_compositor_proxy(&self) -> Box<CompositorProxy+Send> {
|
|
||||||
box GlutCompositorProxy {
|
|
||||||
sender: self.sender.clone(),
|
|
||||||
} as Box<CompositorProxy+Send>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
local_data_key!(TLS_KEY: Rc<Window>)
|
|
||||||
|
|
||||||
fn install_local_window(window: Rc<Window>) {
|
|
||||||
TLS_KEY.replace(Some(window));
|
|
||||||
}
|
|
||||||
|
|
||||||
fn drop_local_window() {
|
|
||||||
TLS_KEY.replace(None);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn local_window() -> Rc<Window> {
|
|
||||||
TLS_KEY.get().unwrap().clone()
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
#ifndef __FREEGLUT_H__
|
|
||||||
#define __FREEGLUT_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* freeglut.h
|
|
||||||
*
|
|
||||||
* The freeglut library include file
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "freeglut_std.h"
|
|
||||||
#include "freeglut_ext.h"
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
#endif /* __FREEGLUT_H__ */
|
|
|
@ -1,252 +0,0 @@
|
||||||
#ifndef __FREEGLUT_EXT_H__
|
|
||||||
#define __FREEGLUT_EXT_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* freeglut_ext.h
|
|
||||||
*
|
|
||||||
* The non-GLUT-compatible extensions to the freeglut library include file
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 2 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Additional GLUT Key definitions for the Special key function
|
|
||||||
*/
|
|
||||||
#define GLUT_KEY_NUM_LOCK 0x006D
|
|
||||||
#define GLUT_KEY_BEGIN 0x006E
|
|
||||||
#define GLUT_KEY_DELETE 0x006F
|
|
||||||
#define GLUT_KEY_SHIFT_L 0x0070
|
|
||||||
#define GLUT_KEY_SHIFT_R 0x0071
|
|
||||||
#define GLUT_KEY_CTRL_L 0x0072
|
|
||||||
#define GLUT_KEY_CTRL_R 0x0073
|
|
||||||
#define GLUT_KEY_ALT_L 0x0074
|
|
||||||
#define GLUT_KEY_ALT_R 0x0075
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window
|
|
||||||
*/
|
|
||||||
#define GLUT_ACTION_EXIT 0
|
|
||||||
#define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1
|
|
||||||
#define GLUT_ACTION_CONTINUE_EXECUTION 2
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new rendering context when the user opens a new window?
|
|
||||||
*/
|
|
||||||
#define GLUT_CREATE_NEW_CONTEXT 0
|
|
||||||
#define GLUT_USE_CURRENT_CONTEXT 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Direct/Indirect rendering context options (has meaning only in Unix/X11)
|
|
||||||
*/
|
|
||||||
#define GLUT_FORCE_INDIRECT_CONTEXT 0
|
|
||||||
#define GLUT_ALLOW_DIRECT_CONTEXT 1
|
|
||||||
#define GLUT_TRY_DIRECT_CONTEXT 2
|
|
||||||
#define GLUT_FORCE_DIRECT_CONTEXT 3
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API Extension macro definitions -- the glutGet parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_INIT_STATE 0x007C
|
|
||||||
|
|
||||||
#define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9
|
|
||||||
|
|
||||||
#define GLUT_WINDOW_BORDER_WIDTH 0x01FA
|
|
||||||
#define GLUT_WINDOW_BORDER_HEIGHT 0x01FB
|
|
||||||
#define GLUT_WINDOW_HEADER_HEIGHT 0x01FB /* Docs say it should always have been GLUT_WINDOW_BORDER_HEIGHT, keep this for backward compatibility */
|
|
||||||
|
|
||||||
#define GLUT_VERSION 0x01FC
|
|
||||||
|
|
||||||
#define GLUT_RENDERING_CONTEXT 0x01FD
|
|
||||||
#define GLUT_DIRECT_RENDERING 0x01FE
|
|
||||||
|
|
||||||
#define GLUT_FULL_SCREEN 0x01FF
|
|
||||||
|
|
||||||
#define GLUT_SKIP_STALE_MOTION_EVENTS 0x0204
|
|
||||||
|
|
||||||
#define GLUT_GEOMETRY_VISUALIZE_NORMALS 0x0205
|
|
||||||
|
|
||||||
/*
|
|
||||||
* New tokens for glutInitDisplayMode.
|
|
||||||
* Only one GLUT_AUXn bit may be used at a time.
|
|
||||||
* Value 0x0400 is defined in OpenGLUT.
|
|
||||||
*/
|
|
||||||
#define GLUT_AUX 0x1000
|
|
||||||
|
|
||||||
#define GLUT_AUX1 0x1000
|
|
||||||
#define GLUT_AUX2 0x2000
|
|
||||||
#define GLUT_AUX3 0x4000
|
|
||||||
#define GLUT_AUX4 0x8000
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Context-related flags, see freeglut_state.c
|
|
||||||
* Set the requested OpenGL version
|
|
||||||
*/
|
|
||||||
#define GLUT_INIT_MAJOR_VERSION 0x0200
|
|
||||||
#define GLUT_INIT_MINOR_VERSION 0x0201
|
|
||||||
#define GLUT_INIT_FLAGS 0x0202
|
|
||||||
#define GLUT_INIT_PROFILE 0x0203
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Flags for glutInitContextFlags, see freeglut_init.c
|
|
||||||
*/
|
|
||||||
#define GLUT_DEBUG 0x0001
|
|
||||||
#define GLUT_FORWARD_COMPATIBLE 0x0002
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Flags for glutInitContextProfile, see freeglut_init.c
|
|
||||||
*/
|
|
||||||
#define GLUT_CORE_PROFILE 0x0001
|
|
||||||
#define GLUT_COMPATIBILITY_PROFILE 0x0002
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Process loop function, see freeglut_main.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutMainLoopEvent( void );
|
|
||||||
FGAPI void FGAPIENTRY glutLeaveMainLoop( void );
|
|
||||||
FGAPI void FGAPIENTRY glutExit ( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window management functions, see freeglut_window.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutFullScreenToggle( void );
|
|
||||||
FGAPI void FGAPIENTRY glutLeaveFullScreen( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window-specific callback functions, see freeglut_callbacks.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutPositionFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) );
|
|
||||||
FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) );
|
|
||||||
/* And also a destruction callback for menus */
|
|
||||||
FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* State setting and retrieval functions, see freeglut_state.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value );
|
|
||||||
FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size);
|
|
||||||
/* A.Donev: User-data manipulation */
|
|
||||||
FGAPI void* FGAPIENTRY glutGetWindowData( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSetWindowData(void* data);
|
|
||||||
FGAPI void* FGAPIENTRY glutGetMenuData( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSetMenuData(void* data);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Font stuff, see freeglut_font.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutBitmapHeight( void* font );
|
|
||||||
FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font );
|
|
||||||
FGAPI void FGAPIENTRY glutBitmapString( void* font, const unsigned char *string );
|
|
||||||
FGAPI void FGAPIENTRY glutStrokeString( void* font, const unsigned char *string );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Geometry functions, see freeglut_geometry.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutWireRhombicDodecahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidRhombicDodecahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, double offset[3], double scale );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, double offset[3], double scale );
|
|
||||||
FGAPI void FGAPIENTRY glutWireCylinder( double radius, double height, GLint slices, GLint stacks);
|
|
||||||
FGAPI void FGAPIENTRY glutSolidCylinder( double radius, double height, GLint slices, GLint stacks);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Extension functions, see freeglut_ext.c
|
|
||||||
*/
|
|
||||||
typedef void (*GLUTproc)();
|
|
||||||
FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Multi-touch/multi-pointer extensions
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define GLUT_HAS_MULTI 1
|
|
||||||
|
|
||||||
/* TODO: add device_id paramater,
|
|
||||||
cf. http://sourceforge.net/mailarchive/forum.php?thread_name=20120518071314.GA28061%40perso.beuc.net&forum_name=freeglut-developer */
|
|
||||||
FGAPI void FGAPIENTRY glutMultiEntryFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMultiButtonFunc( void (* callback)( int, int, int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMultiMotionFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMultiPassiveFunc( void (* callback)( int, int, int ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Joystick functions, see freeglut_joystick.c
|
|
||||||
*/
|
|
||||||
/* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */
|
|
||||||
/* If you have a serious need for these functions in your application, please either
|
|
||||||
* contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net,
|
|
||||||
* switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's
|
|
||||||
* "js" library.
|
|
||||||
*/
|
|
||||||
int glutJoystickGetNumAxes( int ident );
|
|
||||||
int glutJoystickGetNumButtons( int ident );
|
|
||||||
int glutJoystickNotWorking( int ident );
|
|
||||||
float glutJoystickGetDeadBand( int ident, int axis );
|
|
||||||
void glutJoystickSetDeadBand( int ident, int axis, float db );
|
|
||||||
float glutJoystickGetSaturation( int ident, int axis );
|
|
||||||
void glutJoystickSetSaturation( int ident, int axis, float st );
|
|
||||||
void glutJoystickSetMinRange( int ident, float *axes );
|
|
||||||
void glutJoystickSetMaxRange( int ident, float *axes );
|
|
||||||
void glutJoystickSetCenter( int ident, float *axes );
|
|
||||||
void glutJoystickGetMinRange( int ident, float *axes );
|
|
||||||
void glutJoystickGetMaxRange( int ident, float *axes );
|
|
||||||
void glutJoystickGetCenter( int ident, float *axes );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialization functions, see freeglut_init.c
|
|
||||||
*/
|
|
||||||
/* to get the typedef for va_list */
|
|
||||||
#include <stdarg.h>
|
|
||||||
FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion );
|
|
||||||
FGAPI void FGAPIENTRY glutInitContextFlags( int flags );
|
|
||||||
FGAPI void FGAPIENTRY glutInitContextProfile( int profile );
|
|
||||||
FGAPI void FGAPIENTRY glutInitErrorFunc( void (* callback)( const char *fmt, va_list ap ) );
|
|
||||||
FGAPI void FGAPIENTRY glutInitWarningFunc( void (* callback)( const char *fmt, va_list ap ) );
|
|
||||||
|
|
||||||
/* OpenGL >= 2.0 support */
|
|
||||||
FGAPI void FGAPIENTRY glutSetVertexAttribCoord3(GLint attrib);
|
|
||||||
FGAPI void FGAPIENTRY glutSetVertexAttribNormal(GLint attrib);
|
|
||||||
|
|
||||||
/* Mobile platforms lifecycle */
|
|
||||||
FGAPI void FGAPIENTRY glutInitContextFunc(void (* callback)());
|
|
||||||
FGAPI void FGAPIENTRY glutPauseFunc(void (* callback)());
|
|
||||||
FGAPI void FGAPIENTRY glutResumeFunc(void (* callback)());
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the display mode definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_CAPTIONLESS 0x0400
|
|
||||||
#define GLUT_BORDERLESS 0x0800
|
|
||||||
#define GLUT_SRGB 0x1000
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
#endif /* __FREEGLUT_EXT_H__ */
|
|
|
@ -1,656 +0,0 @@
|
||||||
#ifndef __FREEGLUT_STD_H__
|
|
||||||
#define __FREEGLUT_STD_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* freeglut_std.h
|
|
||||||
*
|
|
||||||
* The GLUT-compatible part of the freeglut library include file
|
|
||||||
*
|
|
||||||
* Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved.
|
|
||||||
* Written by Pawel W. Olszta, <olszta@sourceforge.net>
|
|
||||||
* Creation date: Thu Dec 2 1999
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
||||||
* copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation
|
|
||||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
||||||
* and/or sell copies of the Software, and to permit persons to whom the
|
|
||||||
* Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included
|
|
||||||
* in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Under windows, we have to differentiate between static and dynamic libraries
|
|
||||||
*/
|
|
||||||
#ifdef _WIN32
|
|
||||||
/* #pragma may not be supported by some compilers.
|
|
||||||
* Discussion by FreeGLUT developers suggests that
|
|
||||||
* Visual C++ specific code involving pragmas may
|
|
||||||
* need to move to a separate header. 24th Dec 2003
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Define FREEGLUT_LIB_PRAGMAS to 1 to include library
|
|
||||||
* pragmas or to 0 to exclude library pragmas.
|
|
||||||
* The default behavior depends on the compiler/platform.
|
|
||||||
*/
|
|
||||||
# ifndef FREEGLUT_LIB_PRAGMAS
|
|
||||||
# if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE)
|
|
||||||
# define FREEGLUT_LIB_PRAGMAS 1
|
|
||||||
# else
|
|
||||||
# define FREEGLUT_LIB_PRAGMAS 0
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
# define WIN32_LEAN_AND_MEAN 1
|
|
||||||
# endif
|
|
||||||
# ifndef NOMINMAX
|
|
||||||
# define NOMINMAX
|
|
||||||
# endif
|
|
||||||
# include <windows.h>
|
|
||||||
|
|
||||||
/* Windows static library */
|
|
||||||
# ifdef FREEGLUT_STATIC
|
|
||||||
|
|
||||||
# define FGAPI
|
|
||||||
# define FGAPIENTRY
|
|
||||||
|
|
||||||
/* Link with Win32 static freeglut lib */
|
|
||||||
# if FREEGLUT_LIB_PRAGMAS
|
|
||||||
# ifdef NDEBUG
|
|
||||||
# pragma comment (lib, "freeglut_static.lib")
|
|
||||||
# else
|
|
||||||
# pragma comment (lib, "freeglut_staticd.lib")
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Windows shared library (DLL) */
|
|
||||||
# else
|
|
||||||
|
|
||||||
# define FGAPIENTRY __stdcall
|
|
||||||
# if defined(FREEGLUT_EXPORTS)
|
|
||||||
# define FGAPI __declspec(dllexport)
|
|
||||||
# else
|
|
||||||
# define FGAPI __declspec(dllimport)
|
|
||||||
|
|
||||||
/* Link with Win32 shared freeglut lib */
|
|
||||||
# if FREEGLUT_LIB_PRAGMAS
|
|
||||||
# ifdef NDEBUG
|
|
||||||
# pragma comment (lib, "freeglut.lib")
|
|
||||||
# else
|
|
||||||
# pragma comment (lib, "freeglutd.lib")
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Drag in other Windows libraries as required by FreeGLUT */
|
|
||||||
# if FREEGLUT_LIB_PRAGMAS
|
|
||||||
# pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */
|
|
||||||
# pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */
|
|
||||||
# pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */
|
|
||||||
# pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */
|
|
||||||
# pragma comment (lib, "user32.lib") /* link Windows user lib */
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Non-Windows definition of FGAPI and FGAPIENTRY */
|
|
||||||
# define FGAPI
|
|
||||||
# define FGAPIENTRY
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The freeglut and GLUT API versions
|
|
||||||
*/
|
|
||||||
#define FREEGLUT 1
|
|
||||||
#define GLUT_API_VERSION 4
|
|
||||||
#define GLUT_XLIB_IMPLEMENTATION 13
|
|
||||||
/* Deprecated:
|
|
||||||
cf. http://sourceforge.net/mailarchive/forum.php?thread_name=CABcAi1hw7cr4xtigckaGXB5X8wddLfMcbA_rZ3NAuwMrX_zmsw%40mail.gmail.com&forum_name=freeglut-developer */
|
|
||||||
#define FREEGLUT_VERSION_2_0 1
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Always include OpenGL and GLU headers
|
|
||||||
*/
|
|
||||||
/* Note: FREEGLUT_GLES1 and FREEGLUT_GLES2 are only used to cleanly
|
|
||||||
bootstrap headers inclusion here; use GLES constants directly
|
|
||||||
(e.g. GL_ES_VERSION_2_0) for all other needs */
|
|
||||||
#ifdef FREEGLUT_GLES2
|
|
||||||
# include <EGL/egl.h>
|
|
||||||
# include <GLES2/gl2.h>
|
|
||||||
#elif FREEGLUT_GLES1
|
|
||||||
# include <EGL/egl.h>
|
|
||||||
# include <GLES/gl.h>
|
|
||||||
#elif __APPLE__
|
|
||||||
# include <OpenGL/gl.h>
|
|
||||||
# include <OpenGL/glu.h>
|
|
||||||
#else
|
|
||||||
# include <GL/gl.h>
|
|
||||||
# include <GL/glu.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the special key codes:
|
|
||||||
*/
|
|
||||||
#define GLUT_KEY_F1 0x0001
|
|
||||||
#define GLUT_KEY_F2 0x0002
|
|
||||||
#define GLUT_KEY_F3 0x0003
|
|
||||||
#define GLUT_KEY_F4 0x0004
|
|
||||||
#define GLUT_KEY_F5 0x0005
|
|
||||||
#define GLUT_KEY_F6 0x0006
|
|
||||||
#define GLUT_KEY_F7 0x0007
|
|
||||||
#define GLUT_KEY_F8 0x0008
|
|
||||||
#define GLUT_KEY_F9 0x0009
|
|
||||||
#define GLUT_KEY_F10 0x000A
|
|
||||||
#define GLUT_KEY_F11 0x000B
|
|
||||||
#define GLUT_KEY_F12 0x000C
|
|
||||||
#define GLUT_KEY_LEFT 0x0064
|
|
||||||
#define GLUT_KEY_UP 0x0065
|
|
||||||
#define GLUT_KEY_RIGHT 0x0066
|
|
||||||
#define GLUT_KEY_DOWN 0x0067
|
|
||||||
#define GLUT_KEY_PAGE_UP 0x0068
|
|
||||||
#define GLUT_KEY_PAGE_DOWN 0x0069
|
|
||||||
#define GLUT_KEY_HOME 0x006A
|
|
||||||
#define GLUT_KEY_END 0x006B
|
|
||||||
#define GLUT_KEY_INSERT 0x006C
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- mouse state definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_LEFT_BUTTON 0x0000
|
|
||||||
#define GLUT_MIDDLE_BUTTON 0x0001
|
|
||||||
#define GLUT_RIGHT_BUTTON 0x0002
|
|
||||||
#define GLUT_DOWN 0x0000
|
|
||||||
#define GLUT_UP 0x0001
|
|
||||||
#define GLUT_LEFT 0x0000
|
|
||||||
#define GLUT_ENTERED 0x0001
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the display mode definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_RGB 0x0000
|
|
||||||
#define GLUT_RGBA 0x0000
|
|
||||||
#define GLUT_INDEX 0x0001
|
|
||||||
#define GLUT_SINGLE 0x0000
|
|
||||||
#define GLUT_DOUBLE 0x0002
|
|
||||||
#define GLUT_ACCUM 0x0004
|
|
||||||
#define GLUT_ALPHA 0x0008
|
|
||||||
#define GLUT_DEPTH 0x0010
|
|
||||||
#define GLUT_STENCIL 0x0020
|
|
||||||
#define GLUT_MULTISAMPLE 0x0080
|
|
||||||
#define GLUT_STEREO 0x0100
|
|
||||||
#define GLUT_LUMINANCE 0x0200
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- windows and menu related definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_MENU_NOT_IN_USE 0x0000
|
|
||||||
#define GLUT_MENU_IN_USE 0x0001
|
|
||||||
#define GLUT_NOT_VISIBLE 0x0000
|
|
||||||
#define GLUT_VISIBLE 0x0001
|
|
||||||
#define GLUT_HIDDEN 0x0000
|
|
||||||
#define GLUT_FULLY_RETAINED 0x0001
|
|
||||||
#define GLUT_PARTIALLY_RETAINED 0x0002
|
|
||||||
#define GLUT_FULLY_COVERED 0x0003
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- fonts definitions
|
|
||||||
*
|
|
||||||
* Steve Baker suggested to make it binary compatible with GLUT:
|
|
||||||
*/
|
|
||||||
#if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__)
|
|
||||||
# define GLUT_STROKE_ROMAN ((void *)0x0000)
|
|
||||||
# define GLUT_STROKE_MONO_ROMAN ((void *)0x0001)
|
|
||||||
# define GLUT_BITMAP_9_BY_15 ((void *)0x0002)
|
|
||||||
# define GLUT_BITMAP_8_BY_13 ((void *)0x0003)
|
|
||||||
# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004)
|
|
||||||
# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008)
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* I don't really know if it's a good idea... But here it goes:
|
|
||||||
*/
|
|
||||||
extern void* glutStrokeRoman;
|
|
||||||
extern void* glutStrokeMonoRoman;
|
|
||||||
extern void* glutBitmap9By15;
|
|
||||||
extern void* glutBitmap8By13;
|
|
||||||
extern void* glutBitmapTimesRoman10;
|
|
||||||
extern void* glutBitmapTimesRoman24;
|
|
||||||
extern void* glutBitmapHelvetica10;
|
|
||||||
extern void* glutBitmapHelvetica12;
|
|
||||||
extern void* glutBitmapHelvetica18;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Those pointers will be used by following definitions:
|
|
||||||
*/
|
|
||||||
# define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman)
|
|
||||||
# define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman)
|
|
||||||
# define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15)
|
|
||||||
# define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13)
|
|
||||||
# define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10)
|
|
||||||
# define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12)
|
|
||||||
# define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutGet parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_WINDOW_X 0x0064
|
|
||||||
#define GLUT_WINDOW_Y 0x0065
|
|
||||||
#define GLUT_WINDOW_WIDTH 0x0066
|
|
||||||
#define GLUT_WINDOW_HEIGHT 0x0067
|
|
||||||
#define GLUT_WINDOW_BUFFER_SIZE 0x0068
|
|
||||||
#define GLUT_WINDOW_STENCIL_SIZE 0x0069
|
|
||||||
#define GLUT_WINDOW_DEPTH_SIZE 0x006A
|
|
||||||
#define GLUT_WINDOW_RED_SIZE 0x006B
|
|
||||||
#define GLUT_WINDOW_GREEN_SIZE 0x006C
|
|
||||||
#define GLUT_WINDOW_BLUE_SIZE 0x006D
|
|
||||||
#define GLUT_WINDOW_ALPHA_SIZE 0x006E
|
|
||||||
#define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F
|
|
||||||
#define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070
|
|
||||||
#define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071
|
|
||||||
#define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072
|
|
||||||
#define GLUT_WINDOW_DOUBLEBUFFER 0x0073
|
|
||||||
#define GLUT_WINDOW_RGBA 0x0074
|
|
||||||
#define GLUT_WINDOW_PARENT 0x0075
|
|
||||||
#define GLUT_WINDOW_NUM_CHILDREN 0x0076
|
|
||||||
#define GLUT_WINDOW_COLORMAP_SIZE 0x0077
|
|
||||||
#define GLUT_WINDOW_NUM_SAMPLES 0x0078
|
|
||||||
#define GLUT_WINDOW_STEREO 0x0079
|
|
||||||
#define GLUT_WINDOW_CURSOR 0x007A
|
|
||||||
|
|
||||||
#define GLUT_SCREEN_WIDTH 0x00C8
|
|
||||||
#define GLUT_SCREEN_HEIGHT 0x00C9
|
|
||||||
#define GLUT_SCREEN_WIDTH_MM 0x00CA
|
|
||||||
#define GLUT_SCREEN_HEIGHT_MM 0x00CB
|
|
||||||
#define GLUT_MENU_NUM_ITEMS 0x012C
|
|
||||||
#define GLUT_DISPLAY_MODE_POSSIBLE 0x0190
|
|
||||||
#define GLUT_INIT_WINDOW_X 0x01F4
|
|
||||||
#define GLUT_INIT_WINDOW_Y 0x01F5
|
|
||||||
#define GLUT_INIT_WINDOW_WIDTH 0x01F6
|
|
||||||
#define GLUT_INIT_WINDOW_HEIGHT 0x01F7
|
|
||||||
#define GLUT_INIT_DISPLAY_MODE 0x01F8
|
|
||||||
#define GLUT_ELAPSED_TIME 0x02BC
|
|
||||||
#define GLUT_WINDOW_FORMAT_ID 0x007B
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutDeviceGet parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_HAS_KEYBOARD 0x0258
|
|
||||||
#define GLUT_HAS_MOUSE 0x0259
|
|
||||||
#define GLUT_HAS_SPACEBALL 0x025A
|
|
||||||
#define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B
|
|
||||||
#define GLUT_HAS_TABLET 0x025C
|
|
||||||
#define GLUT_NUM_MOUSE_BUTTONS 0x025D
|
|
||||||
#define GLUT_NUM_SPACEBALL_BUTTONS 0x025E
|
|
||||||
#define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F
|
|
||||||
#define GLUT_NUM_DIALS 0x0260
|
|
||||||
#define GLUT_NUM_TABLET_BUTTONS 0x0261
|
|
||||||
#define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262
|
|
||||||
#define GLUT_DEVICE_KEY_REPEAT 0x0263
|
|
||||||
#define GLUT_HAS_JOYSTICK 0x0264
|
|
||||||
#define GLUT_OWNS_JOYSTICK 0x0265
|
|
||||||
#define GLUT_JOYSTICK_BUTTONS 0x0266
|
|
||||||
#define GLUT_JOYSTICK_AXES 0x0267
|
|
||||||
#define GLUT_JOYSTICK_POLL_RATE 0x0268
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutLayerGet parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_OVERLAY_POSSIBLE 0x0320
|
|
||||||
#define GLUT_LAYER_IN_USE 0x0321
|
|
||||||
#define GLUT_HAS_OVERLAY 0x0322
|
|
||||||
#define GLUT_TRANSPARENT_INDEX 0x0323
|
|
||||||
#define GLUT_NORMAL_DAMAGED 0x0324
|
|
||||||
#define GLUT_OVERLAY_DAMAGED 0x0325
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutVideoResizeGet parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384
|
|
||||||
#define GLUT_VIDEO_RESIZE_IN_USE 0x0385
|
|
||||||
#define GLUT_VIDEO_RESIZE_X_DELTA 0x0386
|
|
||||||
#define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387
|
|
||||||
#define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388
|
|
||||||
#define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389
|
|
||||||
#define GLUT_VIDEO_RESIZE_X 0x038A
|
|
||||||
#define GLUT_VIDEO_RESIZE_Y 0x038B
|
|
||||||
#define GLUT_VIDEO_RESIZE_WIDTH 0x038C
|
|
||||||
#define GLUT_VIDEO_RESIZE_HEIGHT 0x038D
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutUseLayer parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_NORMAL 0x0000
|
|
||||||
#define GLUT_OVERLAY 0x0001
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutGetModifiers parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_ACTIVE_SHIFT 0x0001
|
|
||||||
#define GLUT_ACTIVE_CTRL 0x0002
|
|
||||||
#define GLUT_ACTIVE_ALT 0x0004
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- the glutSetCursor parameters
|
|
||||||
*/
|
|
||||||
#define GLUT_CURSOR_RIGHT_ARROW 0x0000
|
|
||||||
#define GLUT_CURSOR_LEFT_ARROW 0x0001
|
|
||||||
#define GLUT_CURSOR_INFO 0x0002
|
|
||||||
#define GLUT_CURSOR_DESTROY 0x0003
|
|
||||||
#define GLUT_CURSOR_HELP 0x0004
|
|
||||||
#define GLUT_CURSOR_CYCLE 0x0005
|
|
||||||
#define GLUT_CURSOR_SPRAY 0x0006
|
|
||||||
#define GLUT_CURSOR_WAIT 0x0007
|
|
||||||
#define GLUT_CURSOR_TEXT 0x0008
|
|
||||||
#define GLUT_CURSOR_CROSSHAIR 0x0009
|
|
||||||
#define GLUT_CURSOR_UP_DOWN 0x000A
|
|
||||||
#define GLUT_CURSOR_LEFT_RIGHT 0x000B
|
|
||||||
#define GLUT_CURSOR_TOP_SIDE 0x000C
|
|
||||||
#define GLUT_CURSOR_BOTTOM_SIDE 0x000D
|
|
||||||
#define GLUT_CURSOR_LEFT_SIDE 0x000E
|
|
||||||
#define GLUT_CURSOR_RIGHT_SIDE 0x000F
|
|
||||||
#define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010
|
|
||||||
#define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011
|
|
||||||
#define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012
|
|
||||||
#define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013
|
|
||||||
#define GLUT_CURSOR_INHERIT 0x0064
|
|
||||||
#define GLUT_CURSOR_NONE 0x0065
|
|
||||||
#define GLUT_CURSOR_FULL_CROSSHAIR 0x0066
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- RGB color component specification definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_RED 0x0000
|
|
||||||
#define GLUT_GREEN 0x0001
|
|
||||||
#define GLUT_BLUE 0x0002
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- additional keyboard and joystick definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_KEY_REPEAT_OFF 0x0000
|
|
||||||
#define GLUT_KEY_REPEAT_ON 0x0001
|
|
||||||
#define GLUT_KEY_REPEAT_DEFAULT 0x0002
|
|
||||||
|
|
||||||
#define GLUT_JOYSTICK_BUTTON_A 0x0001
|
|
||||||
#define GLUT_JOYSTICK_BUTTON_B 0x0002
|
|
||||||
#define GLUT_JOYSTICK_BUTTON_C 0x0004
|
|
||||||
#define GLUT_JOYSTICK_BUTTON_D 0x0008
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GLUT API macro definitions -- game mode definitions
|
|
||||||
*/
|
|
||||||
#define GLUT_GAME_MODE_ACTIVE 0x0000
|
|
||||||
#define GLUT_GAME_MODE_POSSIBLE 0x0001
|
|
||||||
#define GLUT_GAME_MODE_WIDTH 0x0002
|
|
||||||
#define GLUT_GAME_MODE_HEIGHT 0x0003
|
|
||||||
#define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004
|
|
||||||
#define GLUT_GAME_MODE_REFRESH_RATE 0x0005
|
|
||||||
#define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Initialization functions, see fglut_init.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv );
|
|
||||||
FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y );
|
|
||||||
FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height );
|
|
||||||
FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode );
|
|
||||||
FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Process loop function, see freeglut_main.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutMainLoop( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window management functions, see freeglut_window.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutCreateWindow( const char* title );
|
|
||||||
FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height );
|
|
||||||
FGAPI void FGAPIENTRY glutDestroyWindow( int window );
|
|
||||||
FGAPI void FGAPIENTRY glutSetWindow( int window );
|
|
||||||
FGAPI int FGAPIENTRY glutGetWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSetWindowTitle( const char* title );
|
|
||||||
FGAPI void FGAPIENTRY glutSetIconTitle( const char* title );
|
|
||||||
FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height );
|
|
||||||
FGAPI void FGAPIENTRY glutPositionWindow( int x, int y );
|
|
||||||
FGAPI void FGAPIENTRY glutShowWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutHideWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutIconifyWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutPushWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutPopWindow( void );
|
|
||||||
FGAPI void FGAPIENTRY glutFullScreen( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Display-connected functions, see freeglut_display.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window );
|
|
||||||
FGAPI void FGAPIENTRY glutPostRedisplay( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSwapBuffers( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Mouse cursor functions, see freeglut_cursor.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutWarpPointer( int x, int y );
|
|
||||||
FGAPI void FGAPIENTRY glutSetCursor( int cursor );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Overlay stuff, see freeglut_overlay.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutEstablishOverlay( void );
|
|
||||||
FGAPI void FGAPIENTRY glutRemoveOverlay( void );
|
|
||||||
FGAPI void FGAPIENTRY glutUseLayer( GLenum layer );
|
|
||||||
FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void );
|
|
||||||
FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window );
|
|
||||||
FGAPI void FGAPIENTRY glutShowOverlay( void );
|
|
||||||
FGAPI void FGAPIENTRY glutHideOverlay( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Menu stuff, see freeglut_menu.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) );
|
|
||||||
FGAPI void FGAPIENTRY glutDestroyMenu( int menu );
|
|
||||||
FGAPI int FGAPIENTRY glutGetMenu( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSetMenu( int menu );
|
|
||||||
FGAPI void FGAPIENTRY glutAddMenuEntry( const char* label, int value );
|
|
||||||
FGAPI void FGAPIENTRY glutAddSubMenu( const char* label, int subMenu );
|
|
||||||
FGAPI void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value );
|
|
||||||
FGAPI void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value );
|
|
||||||
FGAPI void FGAPIENTRY glutRemoveMenuItem( int item );
|
|
||||||
FGAPI void FGAPIENTRY glutAttachMenu( int button );
|
|
||||||
FGAPI void FGAPIENTRY glutDetachMenu( int button );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Global callback functions, see freeglut_callbacks.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value );
|
|
||||||
FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Window-specific callback functions, see freeglut_callbacks.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) );
|
|
||||||
|
|
||||||
FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval );
|
|
||||||
FGAPI void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) );
|
|
||||||
FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) );
|
|
||||||
|
|
||||||
FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) );
|
|
||||||
FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* State setting and retrieval functions, see freeglut_state.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutGet( GLenum query );
|
|
||||||
FGAPI int FGAPIENTRY glutDeviceGet( GLenum query );
|
|
||||||
FGAPI int FGAPIENTRY glutGetModifiers( void );
|
|
||||||
FGAPI int FGAPIENTRY glutLayerGet( GLenum query );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Font stuff, see freeglut_font.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character );
|
|
||||||
FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character );
|
|
||||||
FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character );
|
|
||||||
FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character );
|
|
||||||
FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string );
|
|
||||||
FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Geometry functions, see freeglut_geometry.c
|
|
||||||
*/
|
|
||||||
|
|
||||||
FGAPI void FGAPIENTRY glutWireCube( double size );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidCube( double size );
|
|
||||||
FGAPI void FGAPIENTRY glutWireSphere( double radius, GLint slices, GLint stacks );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidSphere( double radius, GLint slices, GLint stacks );
|
|
||||||
FGAPI void FGAPIENTRY glutWireCone( double base, double height, GLint slices, GLint stacks );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidCone( double base, double height, GLint slices, GLint stacks );
|
|
||||||
FGAPI void FGAPIENTRY glutWireTorus( double innerRadius, double outerRadius, GLint sides, GLint rings );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidTorus( double innerRadius, double outerRadius, GLint sides, GLint rings );
|
|
||||||
FGAPI void FGAPIENTRY glutWireDodecahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidDodecahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutWireOctahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidOctahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutWireTetrahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidTetrahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutWireIcosahedron( void );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidIcosahedron( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Teapot rendering functions, found in freeglut_teapot.c
|
|
||||||
* NB: front facing polygons have clockwise winding, not counter clockwise
|
|
||||||
*/
|
|
||||||
/* TODO: doesn't work with GLES1 yet */
|
|
||||||
#ifndef EGL_VERSION_1_0
|
|
||||||
FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size );
|
|
||||||
FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Game mode functions, see freeglut_gamemode.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutGameModeString( const char* string );
|
|
||||||
FGAPI int FGAPIENTRY glutEnterGameMode( void );
|
|
||||||
FGAPI void FGAPIENTRY glutLeaveGameMode( void );
|
|
||||||
FGAPI int FGAPIENTRY glutGameModeGet( GLenum query );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Video resize functions, see freeglut_videoresize.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query );
|
|
||||||
FGAPI void FGAPIENTRY glutSetupVideoResizing( void );
|
|
||||||
FGAPI void FGAPIENTRY glutStopVideoResizing( void );
|
|
||||||
FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height );
|
|
||||||
FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Colormap functions, see freeglut_misc.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue );
|
|
||||||
FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component );
|
|
||||||
FGAPI void FGAPIENTRY glutCopyColormap( int window );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Misc keyboard and joystick functions, see freeglut_misc.c
|
|
||||||
*/
|
|
||||||
FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore );
|
|
||||||
FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode );
|
|
||||||
FGAPI void FGAPIENTRY glutForceJoystickFunc( void );
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Misc functions, see freeglut_misc.c
|
|
||||||
*/
|
|
||||||
FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension );
|
|
||||||
FGAPI void FGAPIENTRY glutReportErrors( void );
|
|
||||||
|
|
||||||
/* Comment from glut.h of classic GLUT:
|
|
||||||
|
|
||||||
Win32 has an annoying issue where there are multiple C run-time
|
|
||||||
libraries (CRTs). If the executable is linked with a different CRT
|
|
||||||
from the GLUT DLL, the GLUT DLL will not share the same CRT static
|
|
||||||
data seen by the executable. In particular, atexit callbacks registered
|
|
||||||
in the executable will not be called if GLUT calls its (different)
|
|
||||||
exit routine). GLUT is typically built with the
|
|
||||||
"/MD" option (the CRT with multithreading DLL support), but the Visual
|
|
||||||
C++ linker default is "/ML" (the single threaded CRT).
|
|
||||||
|
|
||||||
One workaround to this issue is requiring users to always link with
|
|
||||||
the same CRT as GLUT is compiled with. That requires users supply a
|
|
||||||
non-standard option. GLUT 3.7 has its own built-in workaround where
|
|
||||||
the executable's "exit" function pointer is covertly passed to GLUT.
|
|
||||||
GLUT then calls the executable's exit function pointer to ensure that
|
|
||||||
any "atexit" calls registered by the application are called if GLUT
|
|
||||||
needs to exit.
|
|
||||||
|
|
||||||
Note that the __glut*WithExit routines should NEVER be called directly.
|
|
||||||
To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */
|
|
||||||
|
|
||||||
/* to get the prototype for exit() */
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__)
|
|
||||||
FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int));
|
|
||||||
FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int));
|
|
||||||
FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int));
|
|
||||||
#ifndef FREEGLUT_BUILDING_LIB
|
|
||||||
#if defined(__GNUC__)
|
|
||||||
#define FGUNUSED __attribute__((unused))
|
|
||||||
#else
|
|
||||||
#define FGUNUSED
|
|
||||||
#endif
|
|
||||||
static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); }
|
|
||||||
#define glutInit glutInit_ATEXIT_HACK
|
|
||||||
static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); }
|
|
||||||
#define glutCreateWindow glutCreateWindow_ATEXIT_HACK
|
|
||||||
static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); }
|
|
||||||
#define glutCreateMenu glutCreateMenu_ATEXIT_HACK
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
#endif /* __FREEGLUT_STD_H__ */
|
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
#ifndef __GLUT_H__
|
|
||||||
#define __GLUT_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
* glut.h
|
|
||||||
*
|
|
||||||
* The freeglut library include file
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
||||||
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
||||||
* PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "freeglut_std.h"
|
|
||||||
|
|
||||||
/*** END OF FILE ***/
|
|
||||||
|
|
||||||
#endif /* __GLUT_H__ */
|
|
|
@ -1,43 +0,0 @@
|
||||||
# Copyright (C) 2010 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.
|
|
||||||
#
|
|
||||||
LOCAL_PATH := $(call my-dir)
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
|
|
||||||
LOCAL_MODULE := freeglut
|
|
||||||
LOCAL_SRC_FILES := libfreeglut-gles2.a
|
|
||||||
|
|
||||||
include $(PREBUILT_STATIC_LIBRARY)
|
|
||||||
|
|
||||||
|
|
||||||
include $(CLEAR_VARS)
|
|
||||||
|
|
||||||
LOCAL_MODULE := ServoAndroid
|
|
||||||
|
|
||||||
LOCAL_SRC_FILES := common.cpp android-dl.cpp main.cpp
|
|
||||||
|
|
||||||
LOCAL_C_INCLUDES := $(LOCAL_PATH) \
|
|
||||||
$(LOCAL_PATH)/../include
|
|
||||||
|
|
||||||
LOCAL_CXXFLAGS := -DFREEGLUT_GLES2 -gstabs+
|
|
||||||
|
|
||||||
LOCAL_LDLIBS := -ldl -llog -landroid -lGLESv2 -lGLESv1_CM -lEGL
|
|
||||||
|
|
||||||
LOCAL_STATIC_LIBRARIES := android_native_app_glue freeglut
|
|
||||||
LOCAL_SHARED_LIBRARIES := libdl
|
|
||||||
|
|
||||||
include $(BUILD_SHARED_LIBRARY)
|
|
||||||
|
|
||||||
$(call import-module,android/native_app_glue)
|
|
|
@ -1,3 +0,0 @@
|
||||||
APP_PLATFORM := android-18
|
|
||||||
APP_STL := stlport_static
|
|
||||||
APP_CPPFLAGS += -lstdc++
|
|
|
@ -1,472 +0,0 @@
|
||||||
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
||||||
/*
|
|
||||||
* Version: MPL 1.1 / GPLv3+ / LGPLv3+
|
|
||||||
*
|
|
||||||
* The contents of this file are subject to the Mozilla Public License Version
|
|
||||||
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
||||||
* the License or as specified alternatively below. You may obtain a copy of
|
|
||||||
* the License at http: *www.mozilla.org/MPL/
|
|
||||||
*
|
|
||||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
||||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
||||||
* for the specific language governing rights and limitations under the
|
|
||||||
* License.
|
|
||||||
*
|
|
||||||
* Major Contributor(s):
|
|
||||||
* Copyright (C) 2011 Tor Lillqvist <tml@iki.fi> (initial developer)
|
|
||||||
* Copyright (C) 2011 SUSE Linux http://suse.com (initial developer's employer)
|
|
||||||
*
|
|
||||||
* All Rights Reserved.
|
|
||||||
*
|
|
||||||
* For minor contributions see the git repository.
|
|
||||||
*
|
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
|
||||||
* either the GNU General Public License Version 3 or later (the "GPLv3+"), or
|
|
||||||
* the GNU Lesser General Public License Version 3 or later (the "LGPLv3+"),
|
|
||||||
* in which case the provisions of the GPLv3+ or the LGPLv3+ are applicable
|
|
||||||
* instead of those above.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <dlfcn.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
|
|
||||||
#include <linux/elf.h>
|
|
||||||
|
|
||||||
#include "android-dl.h"
|
|
||||||
#include "common.h"
|
|
||||||
|
|
||||||
/* The library paths. */
|
|
||||||
const char **library_locations;
|
|
||||||
|
|
||||||
static char last_error[1024] = {0};
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
void set_error(const char* format, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
va_start(args, format);
|
|
||||||
|
|
||||||
vsnprintf(last_error, sizeof(last_error), format, args);
|
|
||||||
__android_log_write(ANDROID_LOG_ERROR, LOG_TAG, last_error);
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define SET_ERROR(format, ...) set_error("%s: " format, __FUNCTION__, ##__VA_ARGS__)
|
|
||||||
|
|
||||||
static char *
|
|
||||||
read_section(int fd,
|
|
||||||
Elf32_Shdr *shdr)
|
|
||||||
{
|
|
||||||
char *result = (char*)malloc(shdr->sh_size);
|
|
||||||
if (lseek(fd, shdr->sh_offset, SEEK_SET) < 0) {
|
|
||||||
close(fd);
|
|
||||||
free(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (read(fd, result, shdr->sh_size) < (int) shdr->sh_size) {
|
|
||||||
close(fd);
|
|
||||||
free(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
char **
|
|
||||||
android_dlneeds(const char *library)
|
|
||||||
{
|
|
||||||
int i, fd;
|
|
||||||
int n_needed;
|
|
||||||
char **result;
|
|
||||||
char *shstrtab;
|
|
||||||
char *dynstr = NULL;
|
|
||||||
Elf32_Ehdr hdr;
|
|
||||||
Elf32_Shdr shdr;
|
|
||||||
Elf32_Dyn dyn;
|
|
||||||
|
|
||||||
/* Open library and read ELF header */
|
|
||||||
|
|
||||||
fd = open(library, O_RDONLY);
|
|
||||||
|
|
||||||
if (fd == -1) {
|
|
||||||
SET_ERROR("Could not open library %s: %s", library, strerror(errno));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (read(fd, &hdr, sizeof(hdr)) < (int) sizeof(hdr)) {
|
|
||||||
set_error("Could not read ELF header of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read in .shstrtab */
|
|
||||||
|
|
||||||
if (lseek(fd, hdr.e_shoff + hdr.e_shstrndx * sizeof(shdr), SEEK_SET) < 0) {
|
|
||||||
set_error("Could not seek to .shstrtab section header of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (read(fd, &shdr, sizeof(shdr)) < (int) sizeof(shdr)) {
|
|
||||||
set_error("Could not read section header of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
shstrtab = read_section(fd, &shdr);
|
|
||||||
if (shstrtab == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* Read section headers, looking for .dynstr section */
|
|
||||||
|
|
||||||
if (lseek(fd, hdr.e_shoff, SEEK_SET) < 0) {
|
|
||||||
set_error("Could not seek to section headers of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; i < hdr.e_shnum; i++) {
|
|
||||||
if (read(fd, &shdr, sizeof(shdr)) < (int) sizeof(shdr)) {
|
|
||||||
set_error("Could not read section header of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (shdr.sh_type == SHT_STRTAB &&
|
|
||||||
strcmp(shstrtab + shdr.sh_name, ".dynstr") == 0) {
|
|
||||||
dynstr = read_section(fd, &shdr);
|
|
||||||
if (dynstr == NULL) {
|
|
||||||
free(shstrtab);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i == hdr.e_shnum) {
|
|
||||||
set_error("No .dynstr section in %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read section headers, looking for .dynamic section */
|
|
||||||
|
|
||||||
if (lseek(fd, hdr.e_shoff, SEEK_SET) < 0) {
|
|
||||||
SET_ERROR("Could not seek to section headers of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (i = 0; i < hdr.e_shnum; i++) {
|
|
||||||
if (read(fd, &shdr, sizeof(shdr)) < (int) sizeof(shdr)) {
|
|
||||||
SET_ERROR("Could not read section header of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (shdr.sh_type == SHT_DYNAMIC) {
|
|
||||||
size_t dynoff;
|
|
||||||
|
|
||||||
/* Count number of DT_NEEDED entries */
|
|
||||||
n_needed = 0;
|
|
||||||
if (lseek(fd, shdr.sh_offset, SEEK_SET) < 0) {
|
|
||||||
SET_ERROR("Could not seek to .dynamic section of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (dynoff = 0; dynoff < shdr.sh_size; dynoff += sizeof(dyn)) {
|
|
||||||
if (read(fd, &dyn, sizeof(dyn)) < (int) sizeof(dyn)) {
|
|
||||||
SET_ERROR("Could not read .dynamic entry of %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (dyn.d_tag == DT_NEEDED)
|
|
||||||
n_needed++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* LOGI("Found %d DT_NEEDED libs", n_needed); */
|
|
||||||
|
|
||||||
result = (char**)malloc((n_needed+1) * sizeof(char *));
|
|
||||||
|
|
||||||
n_needed = 0;
|
|
||||||
if (lseek(fd, shdr.sh_offset, SEEK_SET) < 0) {
|
|
||||||
SET_ERROR("Could not seek to .dynamic section of %s", library);
|
|
||||||
close(fd);
|
|
||||||
free(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
for (dynoff = 0; dynoff < shdr.sh_size; dynoff += sizeof(dyn)) {
|
|
||||||
if (read(fd, &dyn, sizeof(dyn)) < (int) sizeof(dyn)) {
|
|
||||||
SET_ERROR("Could not read .dynamic entry in %s", library);
|
|
||||||
close(fd);
|
|
||||||
free(result);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (dyn.d_tag == DT_NEEDED) {
|
|
||||||
LOGI("needs: %s\n", dynstr + dyn.d_un.d_val);
|
|
||||||
result[n_needed] = strdup(dynstr + dyn.d_un.d_val);
|
|
||||||
n_needed++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
if (dynstr)
|
|
||||||
free(dynstr);
|
|
||||||
free(shstrtab);
|
|
||||||
result[n_needed] = NULL;
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SET_ERROR("Could not find .dynamic section in %s", library);
|
|
||||||
close(fd);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
void *
|
|
||||||
android_dlopen(const char *library)
|
|
||||||
{
|
|
||||||
//added by aydin.kim - parse ld_library_path
|
|
||||||
char *libraries[256];
|
|
||||||
int i1 = 0, icnt = 0;
|
|
||||||
|
|
||||||
char ld_library_path[1024];
|
|
||||||
char* library_path = getenv("LD_LIBRARY_PATH");
|
|
||||||
strcpy(ld_library_path, library_path);
|
|
||||||
|
|
||||||
// LOGI("LD_LIBRARY_PATH is : %s", ld_library_path);
|
|
||||||
libraries[i1] = strtok(ld_library_path, ":");
|
|
||||||
//LOGI("library : %s", libraries[i1]);
|
|
||||||
while(libraries[i1]) {
|
|
||||||
libraries[++i1] = strtok(NULL, ":");
|
|
||||||
//LOGI("library : %s", libraries[i1]);
|
|
||||||
}
|
|
||||||
icnt = i1;
|
|
||||||
|
|
||||||
library_locations = (const char**)malloc((icnt+2) * sizeof(char *));
|
|
||||||
for(int j = 0; j < icnt+2; j++)
|
|
||||||
library_locations[j] = NULL;
|
|
||||||
if(library_locations == NULL) {
|
|
||||||
SET_ERROR("Cannot allocate library locations");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
library_locations[0] = "/data/data/com.example.ServoAndroid/lib";
|
|
||||||
// LOGI("added library path : %s", library_locations[0]);
|
|
||||||
for(int i = 0; i < icnt; i++ ) {
|
|
||||||
library_locations[i+1] = strdup(libraries[i]);
|
|
||||||
// LOGI("added library path : %s", library_locations[i+1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We should *not* try to just dlopen() the bare library name
|
|
||||||
* first, as the stupid dynamic linker remembers for each library
|
|
||||||
* basename if loading it has failed. Thus if you try loading it
|
|
||||||
* once, and it fails because of missing needed libraries, and
|
|
||||||
* your load those, and then try again, it fails with an
|
|
||||||
* infuriating message "failed to load previously" in the log.
|
|
||||||
*
|
|
||||||
* We *must* first dlopen() all needed libraries, recursively. It
|
|
||||||
* shouldn't matter if we dlopen() a library that already is
|
|
||||||
* loaded, dlopen() just returns the same value then.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct loadedLib {
|
|
||||||
const char *name;
|
|
||||||
void *handle;
|
|
||||||
struct loadedLib *next;
|
|
||||||
};
|
|
||||||
static struct loadedLib *loaded_libraries = NULL;
|
|
||||||
|
|
||||||
struct loadedLib *rover;
|
|
||||||
struct loadedLib *new_loaded_lib;
|
|
||||||
|
|
||||||
struct stat st;
|
|
||||||
void *p;
|
|
||||||
char *full_name = NULL;
|
|
||||||
char **needed;
|
|
||||||
int i;
|
|
||||||
int found;
|
|
||||||
|
|
||||||
struct timeval tv0, tv1, tvdiff;
|
|
||||||
|
|
||||||
rover = loaded_libraries;
|
|
||||||
while (rover != NULL &&
|
|
||||||
strcmp(rover->name, library) != 0)
|
|
||||||
rover = rover->next;
|
|
||||||
|
|
||||||
if (rover != NULL)
|
|
||||||
return rover->handle;
|
|
||||||
|
|
||||||
/* LOGI("android_dlopen(%s)", library); */
|
|
||||||
|
|
||||||
found = 0;
|
|
||||||
if (library[0] == '/') {
|
|
||||||
full_name = strdup(library);
|
|
||||||
|
|
||||||
if (stat(full_name, &st) == 0 &&
|
|
||||||
S_ISREG(st.st_mode)) {
|
|
||||||
found = 1;
|
|
||||||
} else {
|
|
||||||
free(full_name);
|
|
||||||
full_name = NULL;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
for (i = 0; !found && library_locations[i] != NULL; i++) {
|
|
||||||
full_name = (char*)malloc(strlen(library_locations[i]) + 1 + strlen(library) + 1);
|
|
||||||
strcpy(full_name, library_locations[i]);
|
|
||||||
strcat(full_name, "/");
|
|
||||||
strcat(full_name, library);
|
|
||||||
|
|
||||||
if (stat(full_name, &st) == 0 &&
|
|
||||||
S_ISREG(st.st_mode)) {
|
|
||||||
found = 1;
|
|
||||||
} else {
|
|
||||||
free(full_name);
|
|
||||||
full_name = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!found) {
|
|
||||||
SET_ERROR("Library %s not found", library);
|
|
||||||
assert(full_name == NULL); // full_name was freed above if !found
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
needed = android_dlneeds(full_name);
|
|
||||||
if (needed == NULL) {
|
|
||||||
free(full_name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; needed[i] != NULL; i++) {
|
|
||||||
if (android_dlopen(needed[i]) == NULL) {
|
|
||||||
free_ptrarray((void **) needed);
|
|
||||||
free(full_name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free_ptrarray((void **) needed);
|
|
||||||
|
|
||||||
gettimeofday(&tv0, NULL);
|
|
||||||
p = dlopen(full_name, RTLD_LOCAL);
|
|
||||||
gettimeofday(&tv1, NULL);
|
|
||||||
timersub(&tv1, &tv0, &tvdiff);
|
|
||||||
LOGI("dlopen(%s) = %p, %ld.%03lds",
|
|
||||||
full_name, p,
|
|
||||||
(long) tvdiff.tv_sec, (long) tvdiff.tv_usec / 1000);
|
|
||||||
if (p == NULL)
|
|
||||||
SET_ERROR("Error from dlopen(%s): %s", full_name, dlerror());
|
|
||||||
free(full_name);
|
|
||||||
full_name = NULL;
|
|
||||||
|
|
||||||
new_loaded_lib = (struct loadedLib*)malloc(sizeof(*new_loaded_lib));
|
|
||||||
new_loaded_lib->name = strdup(library);
|
|
||||||
new_loaded_lib->handle = p;
|
|
||||||
|
|
||||||
new_loaded_lib->next = loaded_libraries;
|
|
||||||
loaded_libraries = new_loaded_lib;
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
void *
|
|
||||||
android_dlsym(void *handle,
|
|
||||||
const char *symbol)
|
|
||||||
{
|
|
||||||
void *p = dlsym(handle, symbol);
|
|
||||||
if (p == NULL)
|
|
||||||
set_error("%s(%p,%s): %s", __FUNCTION__, handle, symbol, dlerror());
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
int
|
|
||||||
android_dladdr(void *addr,
|
|
||||||
Dl_info *info)
|
|
||||||
{
|
|
||||||
FILE *maps;
|
|
||||||
char line[200];
|
|
||||||
int result;
|
|
||||||
int found;
|
|
||||||
|
|
||||||
result = dladdr(addr, info);
|
|
||||||
if (result == 0) {
|
|
||||||
/* LOGI("dladdr(%p) = 0", addr); */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
maps = fopen("/proc/self/maps", "r");
|
|
||||||
if (maps == NULL) {
|
|
||||||
SET_ERROR("Could not open /proc/self/maps: %s", strerror(errno));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
found = 0;
|
|
||||||
while (fgets(line, sizeof(line), maps) != NULL &&
|
|
||||||
line[strlen(line)-1] == '\n') {
|
|
||||||
void *lo, *hi;
|
|
||||||
char file[sizeof(line)];
|
|
||||||
file[0] = '\0';
|
|
||||||
if (sscanf(line, "%x-%x %*s %*x %*x:%*x %*d %[^\n]", (unsigned *) &lo, (unsigned *) &hi, file) == 3) {
|
|
||||||
/* LOGI("got %p-%p: %s", lo, hi, file); */
|
|
||||||
if (addr >= lo && addr < hi) {
|
|
||||||
if (info->dli_fbase != lo) {
|
|
||||||
SET_ERROR("Base for %s in /proc/self/maps %p doesn't match what dladdr() said", file, lo);
|
|
||||||
fclose(maps);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/* LOGI("dladdr(%p) = { %s:%p, %s:%p }: %s",
|
|
||||||
addr,
|
|
||||||
info->dli_fname, info->dli_fbase,
|
|
||||||
info->dli_sname ? info->dli_sname : "(none)", info->dli_saddr,
|
|
||||||
file); */
|
|
||||||
info->dli_fname = strdup(file);
|
|
||||||
found = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!found)
|
|
||||||
SET_ERROR("Did not find %p in /proc/self/maps", addr);
|
|
||||||
fclose(maps);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
int
|
|
||||||
android_dlclose(void *handle)
|
|
||||||
{
|
|
||||||
/* As we don't know when the reference count for a dlopened shared
|
|
||||||
* object drops to zero, we wouldn't know when to remove it from
|
|
||||||
* our list, so we can't call dlclose().
|
|
||||||
*/
|
|
||||||
LOGI("ll_dlclose(%p)", handle);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
const char *
|
|
||||||
android_dl_get_last_error()
|
|
||||||
{
|
|
||||||
return last_error;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // extern "C"
|
|
||||||
|
|
||||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
|
||||||
|
|
||||||
|
|
|
@ -1,29 +0,0 @@
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <dlfcn.h>
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
char ** android_dlneeds(const char *library);
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
void * android_dlopen(const char *library);
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
void * android_dlsym(void *handle, const char *symbol);
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
int android_dladdr(void *addr, Dl_info *info);
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
int android_dlclose(void *handle);
|
|
||||||
|
|
||||||
__attribute__ ((visibility("default")))
|
|
||||||
const char * android_dl_get_last_error();
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
} // extern "C"
|
|
||||||
#endif
|
|
|
@ -1,14 +0,0 @@
|
||||||
#include "common.h"
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
void free_ptrarray(void **pa)
|
|
||||||
{
|
|
||||||
void **rover = pa;
|
|
||||||
|
|
||||||
while (*rover != NULL)
|
|
||||||
free(*rover++);
|
|
||||||
|
|
||||||
free(pa);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
#pragma once
|
|
||||||
#include <android/log.h>
|
|
||||||
|
|
||||||
#undef LOGI
|
|
||||||
#undef LOGW
|
|
||||||
|
|
||||||
#define LOG_TAG "android-dl"
|
|
||||||
#define LOGI(message, ...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "%s: " message, __FUNCTION__, ##__VA_ARGS__)
|
|
||||||
#define LOGW(message, ...) __android_log_print(ANDROID_LOG_WARN, LOG_TAG, "%s: " message, __FUNCTION__, ##__VA_ARGS__)
|
|
||||||
#define LOGE(message, ...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "%s: " message, __FUNCTION__, ##__VA_ARGS__)
|
|
||||||
#define LOGF(message, ...) __android_log_print(ANDROID_LOG_FATAL, LOG_TAG, "%s: " message, __FUNCTION__, ##__VA_ARGS__)
|
|
||||||
|
|
||||||
/* Defines the signature of the function that's callable through Java dlcall */
|
|
||||||
typedef int (*android_dlcall_func_t)(int, const char **);
|
|
||||||
|
|
||||||
void free_ptrarray(void **pa);
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,191 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2010 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <jni.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <pthread.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include <GL/freeglut.h>
|
|
||||||
#include <GL/freeglut_ext.h>
|
|
||||||
#include <GLES2/gl2.h>
|
|
||||||
#include <GLES/gl.h>
|
|
||||||
|
|
||||||
#include <android/sensor.h>
|
|
||||||
#include <android/log.h>
|
|
||||||
#include <android_native_app_glue.h>
|
|
||||||
#include <android-dl.h>
|
|
||||||
|
|
||||||
#define LOG(prio, tag, a, args...) __android_log_print(prio, tag, "[%s::%d]"#a"",__FUNCTION__, __LINE__, ##args);
|
|
||||||
#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_INFO, "native-activity", __VA_ARGS__))
|
|
||||||
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))
|
|
||||||
|
|
||||||
typedef void (*fty_glutMainLoopEvent)();
|
|
||||||
typedef void (*fty_glutInit)(int*, char**);
|
|
||||||
typedef void (*fty_glutInitDisplayMode)(unsigned int);
|
|
||||||
typedef int (*fty_glutCreateWindow)(const char*);
|
|
||||||
typedef void (*fty_glutDestroyWindow)(int);
|
|
||||||
typedef void (*fty_glutPostRedisplay)();
|
|
||||||
typedef void (*fty_glutSwapBuffers)();
|
|
||||||
typedef int (*fty_glutGetWindow)();
|
|
||||||
typedef void (*fty_glutSetWindow)(int);
|
|
||||||
typedef void (*fty_glutReshapeWindow)(int ,int);
|
|
||||||
typedef void (*fty_glutDisplayFunc)(void (*)());
|
|
||||||
typedef void (*fty_glutReshapeFunc)(void (*)(int, int));
|
|
||||||
typedef void (*fty_glutTimerFunc)(unsigned int, void (*)(int), int);
|
|
||||||
typedef int (*fty_glutGet)(unsigned int);
|
|
||||||
typedef void (*fty_glutKeyboardFunc)(void (*)(unsigned char, int, int));
|
|
||||||
typedef void (*fty_glutMouseFunc)(void (*)(int, int, int, int));
|
|
||||||
typedef void (*fty_glutMouseWheelFunc)(void (*)(int, int, int, int));
|
|
||||||
typedef void (*fty_glutSetWindowTitle)(char const*);
|
|
||||||
typedef void (*fty_glutIdleFunc)(void(*)());
|
|
||||||
typedef void (*fty_glutInitWindowSize)(int, int);
|
|
||||||
typedef int (*fty_glutGetModifiers)();
|
|
||||||
|
|
||||||
#define REGISTER_FUNCTION(lib, function)\
|
|
||||||
void (*reg_fn_##function)(fty_##function);\
|
|
||||||
*(void**)(®_fn_##function) = dlsym(lib, "reg_fn_" #function);\
|
|
||||||
if (function == NULL) {\
|
|
||||||
LOGW("could not find reg_fn_" #function " from " #lib);\
|
|
||||||
return;\
|
|
||||||
} else {\
|
|
||||||
LOGI("loaded reg_fn_" #function " from " #lib);\
|
|
||||||
reg_fn_##function(function);\
|
|
||||||
LOGI("registerd "#function);\
|
|
||||||
}\
|
|
||||||
|
|
||||||
static void init_servo()
|
|
||||||
{
|
|
||||||
LOGI("initializing native application for Servo");
|
|
||||||
|
|
||||||
//setenv("RUST_LOG", "servo,gfx,msg,util,layers,js,glut,std,rt,extra", 1);
|
|
||||||
|
|
||||||
// setenv("SERVO_URL", "/mnt/sdcard/html/demo.html", 1);
|
|
||||||
// setenv("RUST_THREADS", "1", 1);
|
|
||||||
|
|
||||||
// char* size_stack = getenv("RUST_MIN_STACK");
|
|
||||||
// char* rust_log = getenv("RUST_LOG");
|
|
||||||
// char* servo_url = getenv("SERVO_URL");
|
|
||||||
|
|
||||||
// LOGI("Stack Size is : %s", size_stack);
|
|
||||||
// LOGI("RUST_LOG flag is : %s", rust_log);
|
|
||||||
// LOGI("loading url is : %s", servo_url);
|
|
||||||
|
|
||||||
|
|
||||||
LOGI("load servo library");
|
|
||||||
void* libservo = android_dlopen("/data/data/com.example.ServoAndroid/lib/libservo.so");
|
|
||||||
if (libservo == NULL) {
|
|
||||||
LOGW("failed to load servo lib: %s", dlerror());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
REGISTER_FUNCTION(libservo, glutMainLoopEvent);
|
|
||||||
REGISTER_FUNCTION(libservo, glutInit);
|
|
||||||
REGISTER_FUNCTION(libservo, glutInitDisplayMode);
|
|
||||||
REGISTER_FUNCTION(libservo, glutCreateWindow);
|
|
||||||
REGISTER_FUNCTION(libservo, glutDestroyWindow);
|
|
||||||
REGISTER_FUNCTION(libservo, glutPostRedisplay);
|
|
||||||
REGISTER_FUNCTION(libservo, glutSwapBuffers);
|
|
||||||
REGISTER_FUNCTION(libservo, glutGetWindow);
|
|
||||||
REGISTER_FUNCTION(libservo, glutSetWindow);
|
|
||||||
REGISTER_FUNCTION(libservo, glutReshapeWindow);
|
|
||||||
REGISTER_FUNCTION(libservo, glutDisplayFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutReshapeFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutTimerFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutGet);
|
|
||||||
REGISTER_FUNCTION(libservo, glutKeyboardFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutMouseFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutMouseWheelFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutSetWindowTitle);
|
|
||||||
REGISTER_FUNCTION(libservo, glutIdleFunc);
|
|
||||||
REGISTER_FUNCTION(libservo, glutInitWindowSize);
|
|
||||||
REGISTER_FUNCTION(libservo, glutGetModifiers);
|
|
||||||
|
|
||||||
void (*main)(int, char**);
|
|
||||||
*(void**)(&main) = dlsym(libservo, "android_start");
|
|
||||||
if (main) {
|
|
||||||
LOGI("go into android_start()");
|
|
||||||
static const char* argv[] = {"servo", "http://en.wikipedia.org/wiki/Rust"};
|
|
||||||
(*main)(2, (char **)argv);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
LOGW("could not find android_start() in the libServo shared library");
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void *stderr_thread(void *) {
|
|
||||||
int pipes[2];
|
|
||||||
pipe(pipes);
|
|
||||||
dup2(pipes[1], STDERR_FILENO);
|
|
||||||
FILE *inputFile = fdopen(pipes[0], "r");
|
|
||||||
char readBuffer[1024];
|
|
||||||
while (1) {
|
|
||||||
fgets(readBuffer, sizeof(readBuffer), inputFile);
|
|
||||||
__android_log_write(2, "stderr", readBuffer);
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern "C" void *stdout_thread(void *) {
|
|
||||||
int pipes[2];
|
|
||||||
pipe(pipes);
|
|
||||||
dup2(pipes[1], STDOUT_FILENO);
|
|
||||||
FILE *inputFile = fdopen(pipes[0], "r");
|
|
||||||
char readBuffer[1024];
|
|
||||||
while (1) {
|
|
||||||
fgets(readBuffer, sizeof(readBuffer), inputFile);
|
|
||||||
__android_log_write(2, "stdout", readBuffer);
|
|
||||||
}
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
pthread_t stderr_tid = -1;
|
|
||||||
pthread_t stdout_tid = -1;
|
|
||||||
|
|
||||||
static void init_std_threads() {
|
|
||||||
pthread_create(&stderr_tid, NULL, stderr_thread, NULL);
|
|
||||||
pthread_create(&stdout_tid, NULL, stdout_thread, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void shutdown_std_threads() {
|
|
||||||
// FIXME(larsberg): this needs to change to signal the threads
|
|
||||||
// to exit, as pthread_cancel is not implemented on Android.
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const int W = 2560;
|
|
||||||
const int H = 1600;
|
|
||||||
|
|
||||||
static int init_display() {
|
|
||||||
LOGI("initialize GLUT window");
|
|
||||||
|
|
||||||
glutInitWindowSize(W, H);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
|
||||||
{
|
|
||||||
init_display();
|
|
||||||
init_std_threads();
|
|
||||||
init_servo();
|
|
||||||
shutdown_std_threads();
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,20 +0,0 @@
|
||||||
# To enable ProGuard in your project, edit project.properties
|
|
||||||
# to define the proguard.config property as described in that file.
|
|
||||||
#
|
|
||||||
# Add project specific ProGuard rules here.
|
|
||||||
# By default, the flags in this file are appended to flags specified
|
|
||||||
# in ${sdk.dir}/tools/proguard/proguard-android.txt
|
|
||||||
# You can edit the include path and order by changing the ProGuard
|
|
||||||
# include property in project.properties.
|
|
||||||
#
|
|
||||||
# For more details, see
|
|
||||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
|
||||||
|
|
||||||
# Add any project specific keep options here:
|
|
||||||
|
|
||||||
# If your project uses WebView with JS, uncomment the following
|
|
||||||
# and specify the fully qualified class name to the JavaScript interface
|
|
||||||
# class:
|
|
||||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
|
||||||
# public *;
|
|
||||||
#}
|
|
|
@ -1,14 +0,0 @@
|
||||||
# This file is automatically generated by Android Tools.
|
|
||||||
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
|
|
||||||
#
|
|
||||||
# This file must be checked in Version Control Systems.
|
|
||||||
#
|
|
||||||
# To customize properties used by the Ant build system edit
|
|
||||||
# "ant.properties", and override values to adapt the script to your
|
|
||||||
# project structure.
|
|
||||||
#
|
|
||||||
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
|
|
||||||
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
|
|
||||||
|
|
||||||
# Project target.
|
|
||||||
target=android-18
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
<string name="app_name">ServoAndroid</string>
|
|
||||||
</resources>
|
|
Loading…
Add table
Add a link
Reference in a new issue