org.lwjgl.opengl.RenderTexture Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of lwjgl Show documentation
Show all versions of lwjgl Show documentation
Lighweight Java Game Library
/*
* Copyright (c) 2002-2008 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.lwjgl.opengl;
import java.nio.IntBuffer;
import org.lwjgl.BufferUtils;
import static org.lwjgl.opengl.GL11.*;
/** This class represents the state necessary for render-to-texture. */
public final class RenderTexture {
// ----------------------------------------------------------------------------------
// ----------------------------- WGL_ARB_render_texture -----------------------------
// ----------------------------------------------------------------------------------
/*
Accepted by the parameter of wglGetPixelFormatAttribivARB,
wglGetPixelFormatAttribfvARB, and the and
parameters of wglChoosePixelFormatARB:
*/
private static final int WGL_BIND_TO_TEXTURE_RGB_ARB = 0x2070;
private static final int WGL_BIND_TO_TEXTURE_RGBA_ARB = 0x2071;
/*
Accepted by the parameter of wglCreatePbufferARB and
by the parameter of wglQueryPbufferARB:
*/
private static final int WGL_TEXTURE_FORMAT_ARB = 0x2072;
private static final int WGL_TEXTURE_TARGET_ARB = 0x2073;
private static final int WGL_MIPMAP_TEXTURE_ARB = 0x2074;
/*
Accepted as a value in the parameter of
wglCreatePbufferARB and returned in the value parameter of
wglQueryPbufferARB when is WGL_TEXTURE_FORMAT_ARB:
*/
private static final int WGL_TEXTURE_RGB_ARB = 0x2075;
private static final int WGL_TEXTURE_RGBA_ARB = 0x2076;
/*
Accepted as a value in the parameter of
wglCreatePbufferARB and returned in the value parameter of
wglQueryPbufferARB when is WGL_TEXTURE_TARGET_ARB:
*/
private static final int WGL_TEXTURE_CUBE_MAP_ARB = 0x2078;
private static final int WGL_TEXTURE_1D_ARB = 0x2079;
private static final int WGL_TEXTURE_2D_ARB = 0x207A;
private static final int WGL_NO_TEXTURE_ARB = 0x2077;
/*
Accepted by the parameter of wglSetPbufferAttribARB and
by the parameter of wglQueryPbufferARB:
*/
static final int WGL_MIPMAP_LEVEL_ARB = 0x207B;
static final int WGL_CUBE_MAP_FACE_ARB = 0x207C;
/*
Accepted as a value in the parameter of
wglSetPbufferAttribARB and returned in the value parameter of
wglQueryPbufferARB when is WGL_CUBE_MAP_FACE_ARB:
*/
static final int WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB = 0x207D;
static final int WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB = 0x207E;
static final int WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB = 0x207F;
static final int WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB = 0x2080;
static final int WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB = 0x2081;
static final int WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB = 0x2082;
/*
Accepted by the parameter of wglBindTexImageARB and
wglReleaseTexImageARB:
*/
static final int WGL_FRONT_LEFT_ARB = 0x2083;
static final int WGL_FRONT_RIGHT_ARB = 0x2084;
static final int WGL_BACK_LEFT_ARB = 0x2085;
static final int WGL_BACK_RIGHT_ARB = 0x2086;
/*
private static final int WGL_AUX0_ARB = 0x2087;
private static final int WGL_AUX1_ARB = 0x2088;
private static final int WGL_AUX2_ARB = 0x2089;
private static final int WGL_AUX3_ARB = 0x208A;
private static final int WGL_AUX4_ARB = 0x208B;
private static final int WGL_AUX5_ARB = 0x208C;
private static final int WGL_AUX6_ARB = 0x208D;
private static final int WGL_AUX7_ARB = 0x208E;
private static final int WGL_AUX8_ARB = 0x208F;
private static final int WGL_AUX9_ARB = 0x2090;
*/
// -------------------------------------------------------------------------------------------
// ----------------------------- WGL_NV_render_texture_rectangle -----------------------------
// -------------------------------------------------------------------------------------------
/*
Accepted by the parameter of wglGetPixelFormatAttribivARB,
wglGetPixelFormatAttribfvARB, and the and
parameters of wglChoosePixelFormatARB:
*/
private static final int WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV = 0x20A0;
private static final int WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV = 0x20A1;
/*
Accepted as a value in the parameter of wglCreatePbufferARB
and returned in the value parameter of wglQueryPbufferARB when
is WGL_TEXTURE_TARGET_ARB:
*/
private static final int WGL_TEXTURE_RECTANGLE_NV = 0x20A2;
// ---------------------------------------------------------------------------------------
// ----------------------------- WGL_NV_render_depth_texture -----------------------------
// ---------------------------------------------------------------------------------------
/*
Accepted by the parameter of wglGetPixelFormatAttribivARB,
wglGetPixelFormatAttribfvARB, and the and
parameters of wglChoosePixelFormatARB:
*/
private static final int WGL_BIND_TO_TEXTURE_DEPTH_NV = 0x20A3;
private static final int WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV = 0x20A4;
/*
Accepted by the parameter of wglCreatePbufferARB and
by the parameter of wglQueryPbufferARB:
*/
private static final int WGL_DEPTH_TEXTURE_FORMAT_NV = 0x20A5;
/*
Accepted as a value in the parameter of wglCreatePbufferARB
and returned in the value parameter of wglQueryPbufferARB when
is WGL_DEPTH_TEXTURE_FORMAT_NV:
*/
private static final int WGL_TEXTURE_DEPTH_COMPONENT_NV = 0x20A6;
/*
Accepted by the parameter of wglBindTexImageARB:
*/
static final int WGL_DEPTH_COMPONENT_NV = 0x20A7;
/** The TEXTURE_1D target. */
public static final int RENDER_TEXTURE_1D = WGL_TEXTURE_1D_ARB;
/** The TEXTURE_2D target. */
public static final int RENDER_TEXTURE_2D = WGL_TEXTURE_2D_ARB;
/** The TEXTURE_RECTANGLE target. */
public static final int RENDER_TEXTURE_RECTANGLE = WGL_TEXTURE_RECTANGLE_NV;
/** The TEXTURE_CUBE_MAP target. */
public static final int RENDER_TEXTURE_CUBE_MAP = WGL_TEXTURE_CUBE_MAP_ARB;
IntBuffer pixelFormatCaps;
IntBuffer pBufferAttribs;
/**
* Creates a RenderTexture object for enabling render-to-texture on a P-buffer.
*
* NOTE: Only one of useRGB and useRGBA can be true at the same time.
*
* NOTE: useRGB(A) and useDepth can be true at the same time, thus allowing two different render textures.
*
* NOTE: The target parameter can be one of the following:
*
* RENDER_TEXTURE_1D RENDER_TEXTURE_2D RENDER_TEXTURE_RECTANGLE RENDER_TEXTURE_CUBE_MAP
*
* @param useRGB - When true the P-buffer can be used as an RGB render texture.
* @param useRGBA - When true the P-buffer can be used as an RGBA render texture.
* @param useDepth - When true the P-buffer can be used as a depth render texture.
* @param isRectangle - When true rectangle textures will be allowed on the P-buffer.
* @param target - The texture target of the render texture.
* @param mipmaps - How many mipmap levels to allocate on the P-buffer.
*/
public RenderTexture(boolean useRGB, boolean useRGBA, boolean useDepth, boolean isRectangle, int target, int mipmaps) {
if ( useRGB && useRGBA )
throw new IllegalArgumentException("A RenderTexture can't be both RGB and RGBA.");
if ( mipmaps < 0 )
throw new IllegalArgumentException("The mipmap levels can't be negative.");
if ( isRectangle && target != RENDER_TEXTURE_RECTANGLE )
throw new IllegalArgumentException("When the RenderTexture is rectangle the target must be RENDER_TEXTURE_RECTANGLE.");
pixelFormatCaps = BufferUtils.createIntBuffer(4);
pBufferAttribs = BufferUtils.createIntBuffer(8);
if ( useRGB ) {
pixelFormatCaps.put(isRectangle ? WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV : WGL_BIND_TO_TEXTURE_RGB_ARB);
pixelFormatCaps.put(GL_TRUE);
pBufferAttribs.put(WGL_TEXTURE_FORMAT_ARB);
pBufferAttribs.put(WGL_TEXTURE_RGB_ARB);
} else if ( useRGBA ) {
pixelFormatCaps.put(isRectangle ? WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV : WGL_BIND_TO_TEXTURE_RGBA_ARB);
pixelFormatCaps.put(GL_TRUE);
pBufferAttribs.put(WGL_TEXTURE_FORMAT_ARB);
pBufferAttribs.put(WGL_TEXTURE_RGBA_ARB);
}
if ( useDepth ) {
pixelFormatCaps.put(isRectangle ? WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV : WGL_BIND_TO_TEXTURE_DEPTH_NV);
pixelFormatCaps.put(GL_TRUE);
pBufferAttribs.put(WGL_DEPTH_TEXTURE_FORMAT_NV);
pBufferAttribs.put(WGL_TEXTURE_DEPTH_COMPONENT_NV);
}
pBufferAttribs.put(WGL_TEXTURE_TARGET_ARB);
pBufferAttribs.put(target);
if ( mipmaps != 0 ) {
pBufferAttribs.put(WGL_MIPMAP_TEXTURE_ARB);
pBufferAttribs.put(mipmaps);
}
pixelFormatCaps.flip();
pBufferAttribs.flip();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy