mirror of
https://github.com/servo/servo.git
synced 2025-08-02 04:00:32 +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")]
|
||||
fn setup_logging() {
|
||||
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(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