1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
-----------------
HIGH PRIORITY
-----------------
- Make pixel format selection more robust. Provide access to the
selected GLCapabilities so applications can see whether they got the
pixel format they expected. Check the GLJPanel implementation after
the most recent DefaultGLCapabilitiesChooser changes and see whether
it is still working.
- Fully expose ARB_vertex_buffer_object APIs.
- Fix addNotify()/removeNotify() handling so that adding and removing
a canvas from a window, etc. works properly.
- Test Cg binding on Linux. Find out if Cg is available on Mac OS X.
- Finish implementation in GlueGen of <type>** arguments (currently
only works for "const char**". This is needed for
glMultiDrawElements and one Cg routine.
- Non-const array types must be properly released with JNI_COMMIT in
order to see side effects if the array was copied.
-----------------
MEDIUM PRIORITY
-----------------
- Look into providing built-in full-screen support on all supported
platforms.
- Figure out how to implement GLEventListener.displayChanged(bool,bool).
I believe we need additional support in J2SE before this will be possible
to detect and implement. The basic problem is that we need to find a way
to determine when a GLCanvas has moved to a different
display device, so we can re-load the GL function addresses using
wgl/glXGetProcAddress. See comments at top of GLCanvas.java. Also need a
way to determine with the display mode (e.g., bit depth) of the GLDrawable
has changed. Once both of these problems are solved, we'll need to hook it
into GLEventListener.displayChanged() and also be sure to reset the
GLDrawable's glProcAddress table as appropriate.
-----------------
LOW PRIORITY
-----------------
- Hardware acceleration for GLJPanel via pbuffers
- Think about making StructAccessors for e.g. GLUquadric "more opaque"
- Think about e.g. protected access for Impl classes
- Find a way to limit the expansion of void* types to only certain
java array types. For example, glCallLists(..., GLenum type, void*)
only accepts certain values in its type parameter; it would be nice
to limit the expansion to those types.
- Fix glProgramStringARB and glGetProgramString{NV,ARB} so that they
use Strings and/or StringBuffers insteead of GLUbyte* and void*
- figure out how to deal with WGL entry points:
WINGDIAPI HGLRC WINAPI wglCreateLayerContext(HDC, int);
WINGDIAPI BOOL WINAPI wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
WINGDIAPI BOOL WINAPI wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
see commented-out section in make/stub_includes/win32/wingdi.h
- Need a disciplined mechanism for converting char* argument types. For
example, many C functions accept a "char*" argument with the semantic that
output data will be written into the buffer pointed to by the
argument. The type "const char*" is used when the argument's data will be
unchanged. Our system needs a new directive, such as
"ArgumentIsStringBuffer" to be used for type conversion in those cases
where the native code needs to write output into the "char*" argument. Not
sure how to handle this on the native side -- it may require hints to the
native code generator as to how large the StringBuffer's backing buffer
needs to be, so we can assert this condition before passing the backing
buffer to the C function we are wrapping.
- Throw an exception if native calls to GetPrimitiveArrayCritical
return null.
- Before emitting functions and constants, sort them first by
extension suffix (i.e., ARB, ATI, NV, etc) and then by name. This
will organize them in the file more logically. When writing the
code, the sort function can check the last substring that's all caps,
and treat this as the extension owner. Be careful though, some end
in "3D" and that's not an extension.
|