aboutsummaryrefslogtreecommitdiffstats
path: root/src/native
diff options
context:
space:
mode:
authorChien Yang <[email protected]>2007-03-21 22:54:08 +0000
committerChien Yang <[email protected]>2007-03-21 22:54:08 +0000
commit9327277a80d538abf0fe638065a22b16be9be8bd (patch)
treebee4bc6043d6909a1bc117eed9dc15a2b6bd9ea0 /src/native
parent48f2ad8638b490854eebcfa07ea59b811189efd9 (diff)
1) Implemented Issue 126 : Use OpenGL automatic mipmap generation
2) Fixed Issue 408 : Poor quality of auto-generated mipmaps git-svn-id: https://svn.java.net/svn/j3d-core~svn/trunk@799 ba19aa83-45c5-6ac9-afd3-db810772062c
Diffstat (limited to 'src/native')
-rw-r--r--src/native/d3d/Attributes.cpp30
-rw-r--r--src/native/d3d/Canvas3D.cpp4
-rw-r--r--src/native/d3d/D3dUtil.cpp10
-rw-r--r--src/native/d3d/D3dUtil.hpp3
-rw-r--r--src/native/ogl/Attributes.c48
5 files changed, 70 insertions, 25 deletions
diff --git a/src/native/d3d/Attributes.cpp b/src/native/d3d/Attributes.cpp
index c3f6752..9540aac 100644
--- a/src/native/d3d/Attributes.cpp
+++ b/src/native/d3d/Attributes.cpp
@@ -2205,8 +2205,10 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage(
jint width,
jint height,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
+ /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */
GetDevice();
if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) {
@@ -2284,7 +2286,8 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage(
jint height,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
GetDevice();
@@ -2322,7 +2325,7 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage(
if (surf == NULL) {
// Need to create surface
surf = createTextureSurface(d3dCtx, numLevels, textureFormat,
- width, height);
+ width, height, useAutoMipMap);
if (surf == NULL) {
return;
@@ -2529,9 +2532,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage(
jint depth,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
-
+ /* Note: useAutoMipMap is not use instead numLevel will be use for d3d pipe */
+
GetDevice();
if (d3dCtx->deviceInfo->maxTextureDepth <= 0) {
@@ -2655,8 +2660,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSubImage(
jint height,
jint depth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
+ /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */
+
GetDevice();
if ((d3dCtx->deviceInfo->maxTextureDepth <= 0) ||
@@ -2853,8 +2861,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSubImage(
jint width,
jint height,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
+ /* Note: useAutoMipMap is not use for SubImage in the d3d pipe */
+
GetDevice();
if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) {
@@ -2934,8 +2945,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapImage(
jint height,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
+ /* Note: useAutoMipMap is not use instead numLevel will be use for d3d pipe */
+
GetDevice();
if (d3dCtx->texUnitStage >= d3dCtx->bindTextureIdLen) {
diff --git a/src/native/d3d/Canvas3D.cpp b/src/native/d3d/Canvas3D.cpp
index 699895b..80eeeb7 100644
--- a/src/native/d3d/Canvas3D.cpp
+++ b/src/native/d3d/Canvas3D.cpp
@@ -202,7 +202,7 @@ jboolean JNICALL Java_javax_media_j3d_NativePipeline_initTexturemapping(
Java_javax_media_j3d_NativePipeline_updateTexture2DImage(env, texture, ctx, 1, 0,
J3D_RGBA, 0, texWidth,
- texHeight, 0, 0, NULL);
+ texHeight, 0, 0, NULL, JNI_FALSE);
return (d3dCtx->textureTable[objectId] != NULL);
}
@@ -235,7 +235,7 @@ void JNICALL Java_javax_media_j3d_NativePipeline_texturemapping(
Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage(
env, texture, ctx, 0, minX, minY, J3D_RGBA, format,
minX, minY, rasWidth, maxX-minX, maxY-minY, IMAGE_DATA_TYPE_BYTE_ARRAY,
- byteData);
+ byteData, JNI_FALSE);
LPDIRECT3DTEXTURE9 surf = d3dCtx->textureTable[objectId];
diff --git a/src/native/d3d/D3dUtil.cpp b/src/native/d3d/D3dUtil.cpp
index 2ee0e40..0cc0057 100644
--- a/src/native/d3d/D3dUtil.cpp
+++ b/src/native/d3d/D3dUtil.cpp
@@ -759,11 +759,13 @@ DWORD firstBit(DWORD mask)
LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx,
jint numLevels,
jint textureFormat,
- jint width, jint height)
+ jint width, jint height,
+ jboolean useAutoMipMap)
{
LPDIRECT3DTEXTURE9 pTexture;
D3DFORMAT format;
HRESULT hr;
+ DWORD usage = 0;
LPDIRECT3DDEVICE9 pDevice = d3dCtx->pDevice;
D3dDeviceInfo *deviceInfo = d3dCtx->deviceInfo;
@@ -775,10 +777,14 @@ LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx,
getTexWidthHeight(deviceInfo, &width, &height);
format = getTexFormat(textureFormat);
+ if (useAutoMipMap) {
+ usage |= D3DUSAGE_AUTOGENMIPMAP;
+ }
+
// If format not support, the utility function will adjust the
// calling parameters automatically
hr = D3DXCreateTexture(d3dCtx->pDevice, width, height,
- numLevels, 0, format, D3DPOOL_MANAGED,
+ numLevels, usage, format, D3DPOOL_MANAGED,
&pTexture);
if (FAILED(hr)) {
diff --git a/src/native/d3d/D3dUtil.hpp b/src/native/d3d/D3dUtil.hpp
index e1035cb..b1a7560 100644
--- a/src/native/d3d/D3dUtil.hpp
+++ b/src/native/d3d/D3dUtil.hpp
@@ -145,7 +145,8 @@ extern LPDIRECT3DTEXTURE9 createTextureSurface(D3dCtx *d3dCtx,
jint numLevels,
jint internalFormat,
jint width,
- jint height);
+ jint height,
+ jboolean useAutoMipMap);
extern LPDIRECT3DVOLUMETEXTURE9 createVolumeTexture(D3dCtx *d3dCtx,
diff --git a/src/native/ogl/Attributes.c b/src/native/ogl/Attributes.c
index 921b949..4d2213e 100644
--- a/src/native/ogl/Attributes.c
+++ b/src/native/ogl/Attributes.c
@@ -2197,7 +2197,8 @@ void updateTexture2DImage(
jint height,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
void *imageObjPtr;
GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8;
@@ -2234,7 +2235,14 @@ void updateTexture2DImage(
throwAssert(env, "updateTexture2DImage : textureFormat illegal format");
return;
}
-
+
+ if (useAutoMipMap) {
+ glTexParameteri(target, GL_GENERATE_MIPMAP, GL_TRUE);
+ }
+ else {
+ glTexParameteri(target, GL_GENERATE_MIPMAP, GL_FALSE);
+ }
+
if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) {
switch (imageFormat) {
/* GL_BGR */
@@ -2360,7 +2368,7 @@ void updateTexture2DSubImage(
jint height,
jint dataType,
jobject data) {
-
+
void *imageObjPtr;
GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8;
JNIEnv table = *env;
@@ -2670,9 +2678,10 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DSubImage(
jint width,
jint height,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
-
+ /* Note : useAutoMipMap is not use for subImage in ogl pipe */
GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo;
updateTexture2DSubImage(env, ctxProperties, GL_TEXTURE_2D,
level, xoffset, yoffset,
@@ -2695,13 +2704,14 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture2DImage(
jint height,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo;
updateTexture2DImage(env, ctxProperties, GL_TEXTURE_2D,
numLevels, level, textureFormat, imageFormat,
- width, height, boundaryWidth, dataType, data);
+ width, height, boundaryWidth, dataType, data, useAutoMipMap);
}
JNIEXPORT
@@ -2850,7 +2860,8 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage(
jint depth,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
void *imageObjPtr;
GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8;
@@ -2890,6 +2901,12 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DImage(
return;
}
+ if (useAutoMipMap) {
+ glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_TRUE);
+ }
+ else {
+ glTexParameteri(GL_TEXTURE_3D, GL_GENERATE_MIPMAP, GL_FALSE);
+ }
if((dataType == IMAGE_DATA_TYPE_BYTE_ARRAY) || (dataType == IMAGE_DATA_TYPE_BYTE_BUFFER)) {
switch (imageFormat) {
@@ -3017,8 +3034,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTexture3DSubImage(
jint height,
jint depth,
jint dataType,
- jobject data) {
+ jobject data,
+ jboolean useAutoMipMap) {
+ /* Note : useAutoMipMap is not use for SubImage in ogl pipe */
+
void *imageObjPtr;
GLenum format = 0, internalFormat = 0, type = GL_UNSIGNED_INT_8_8_8_8;
JNIEnv table = *env;
@@ -3364,8 +3384,11 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapSubImage(
jint width,
jint height,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
+ /* Note : useAutoMipMap is not use for SubImage in ogl pipe */
+
GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo;
updateTexture2DSubImage(env, ctxProperties, _gl_textureCubeMapFace[face],
level, xoffset, yoffset, textureFormat,
@@ -3389,12 +3412,13 @@ void JNICALL Java_javax_media_j3d_NativePipeline_updateTextureCubeMapImage(
jint height,
jint boundaryWidth,
jint dataType,
- jobject data)
+ jobject data,
+ jboolean useAutoMipMap)
{
GraphicsContextPropertiesInfo *ctxProperties = (GraphicsContextPropertiesInfo *)ctxInfo;
updateTexture2DImage(env, ctxProperties, _gl_textureCubeMapFace[face],
numLevels, level, textureFormat, imageFormat,
- width, height, boundaryWidth, dataType, data);
+ width, height, boundaryWidth, dataType, data, useAutoMipMap);
}
JNIEXPORT