diff options
author | Sven Gothel <[email protected]> | 2013-06-14 04:40:39 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-06-14 04:40:39 +0200 |
commit | a7802a2ab90a68ecbba962149a335f975fce24e7 (patch) | |
tree | a702cdf0e35e36f6e2bf042b6325c3f435c5b65c /src/junit/com/jogamp/gluegen | |
parent | 3cf28f2980b1593e4b32230d5206decd6afe2cbb (diff) |
GlueGen (Compile Time): Add 'CStruct' Annotation Processor (APT) to 'gluegen' C Structs on-the-fly (2-pass actually).
Convenient annotation processing (APT) hooked to 'javac' (1.6) via gluegen.jar META-INF
service provider 'javax.annotation.processing.Processor' -> 'com.jogamp.gluegen.structgen.CStructAnnotationProcessor'.
Am implicit APT / JAVAC would be possible, however - to have a proper process
the unit test utilizes an explicit 2 pass run:
<!-- Annotation Processor Only - First -->
<javac destdir="${build_t.java}">
<classpath refid="junit.compile.classpath"/>
<compilerarg value="-proc:only"/>
<compilerarg value="-J-Djogamp.gluegen.structgen.debug"/>
<compilerarg value="-J-Djogamp.gluegen.structgen.output=${build_t.gen}/classes"/>
<src path="${test.base.dir}/com/jogamp/gluegen/test/junit/structgen"/>
</javac>
<!-- Javac Only - Second -->
<javac destdir="${build_t.java}">
<classpath refid="junit.compile.classpath"/>
<compilerarg value="-proc:none"/>
<src path="${test.base.dir}"/>
<src path="${build_t.gen}" />
</javac>
Original code from Michael Bien's 'superglue' git://github.com/mbien/superglue.git,
finally merged to GlueGen (as once intended).
Note: The APT javac pass requires to use 'gluegen.jar' instead of 'gluegen-rt.jar' !
The 2-pass process also alows using the runtime gluegen-rt.jar and hence ensures
clean namespace check at compilation.
Diffstat (limited to 'src/junit/com/jogamp/gluegen')
-rw-r--r-- | src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h | 24 | ||||
-rw-r--r-- | src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java | 51 |
2 files changed, 75 insertions, 0 deletions
diff --git a/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h new file mode 100644 index 0000000..6ad77d9 --- /dev/null +++ b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStruct01.h @@ -0,0 +1,24 @@ +// +// TestStruct01.h +// + +typedef struct { + float x, y, z; +} Vec3f; + +typedef struct { + Vec3f orig, dir; +} Camera; + +typedef struct { + unsigned int width, height; + int superSamplingSize; + int actvateFastRendering; + int enableShadow; + + unsigned int maxIterations; + float epsilon; + float mu[4]; + float light[3]; + Camera camera; +} RenderingConfig; diff --git a/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java new file mode 100644 index 0000000..444593d --- /dev/null +++ b/src/junit/com/jogamp/gluegen/test/junit/structgen/TestStructGen01.java @@ -0,0 +1,51 @@ +package com.jogamp.gluegen.test.junit.structgen; + +import com.jogamp.gluegen.structgen.CStruct; +import com.jogamp.junit.util.JunitTracer; + +import org.junit.Assert; +import org.junit.Test; + +public class TestStructGen01 extends JunitTracer { + + // APT is only triggered for fields, + // hence we use unused fields in this unit test! + + // @CStruct(name="RenderingConfig", header="TestStruct01.h") + // MyRenderingConfig config; + + @CStruct(header="TestStruct01.h") + RenderingConfig config0; + + @Test + public void test01() { + RenderingConfig config = RenderingConfig.create(); + Vec3f dir = config.getCamera().getDir(); + dir.setX(0.5f); + dir.setY(0.6f); + dir.setZ(0.7f); + Vec3f dir2 = Vec3f.create(dir.getBuffer()); + Assert.assertEquals(dir.getX(), dir2.getX(), 0.0001f); + Assert.assertEquals(dir.getY(), dir2.getY(), 0.0001f); + Assert.assertEquals(dir.getZ(), dir2.getZ(), 0.0001f); + } + + @Test + public void test02() { + Camera cam = Camera.create(); + Vec3f cam_dir = cam.getDir(); + Vec3f cam_orig = cam.getOrig(); + cam_dir.setX(1); + cam_dir.setY(2); + cam_dir.setZ(3); + cam_orig.setX(0); + cam_orig.setY(1); + cam_orig.setZ(2); + } + + public static void main(String args[]) { + String tstname = TestStructGen01.class.getName(); + org.junit.runner.JUnitCore.main(tstname); + } + +} |