org.lwjgl.opengles.EXTPrimitiveBoundingBox Maven / Gradle / Ivy
Show all versions of lwjgl-opengles Show documentation
/*
* Copyright LWJGL. All rights reserved.
* License terms: https://www.lwjgl.org/license
* MACHINE GENERATED FILE, DO NOT EDIT
*/
package org.lwjgl.opengles;
import static org.lwjgl.system.Checks.*;
/**
* Native bindings to the EXT_primitive_bounding_box extension.
*
* On tile-based architectures, transformed primitives are generally written out to memory before rasterization, and then read back from memory for each
* tile they intersect. When geometry expands during transformation due to tessellation or one-to-many geometry shaders, the external bandwidth required
* grows proportionally. This extension provides a way for implementations to know which tiles incoming geometry will intersect before fully transforming
* (and expanding) the geometry. This allows them to only store the unexpanded geometry in memory, and perform expansion on-chip for each intersected
* tile.
*
* New state is added to hold an axis-aligned bounding box which is assumed to contain any geometry submitted. An implementation is allowed to ignore any
* portions of primitives outside the bounding box; thus if a primitive extends outside of a tile into a neighboring tile that the bounding box didn't
* intersect, the implementation is not required to render those portions. The tessellation control shader is optionally able to specify a per-patch
* bounding box that overrides the bounding box state for primitives generated from that patch, in order to provide tighter bounds.
*
* The typical usage is that an application will have an object-space bounding volume for a primitive or group of primitives, either calculated at runtime
* or provided with the mesh by the authoring tool or content pipeline. It will transform this volume to clip space, compute an axis-aligned bounding box
* that contains the transformed bounding volume, and provide that at either per-patch or per-draw granularity.
*
* Requires {@link GLES31 GLES 3.1}.
*/
public class EXTPrimitiveBoundingBox {
/** Accepted by the {@code pname} parameter of GetBooleanv, GetFloatv, GetIntegerv, and GetInteger64v. */
public static final int GL_PRIMITIVE_BOUNDING_BOX_EXT = 0x92BE;
static { GLES.initialize(); }
protected EXTPrimitiveBoundingBox() {
throw new UnsupportedOperationException();
}
static boolean isAvailable(GLESCapabilities caps) {
return checkFunctions(
caps.glPrimitiveBoundingBoxEXT
);
}
// --- [ glPrimitiveBoundingBoxEXT ] ---
public static native void nglPrimitiveBoundingBoxEXT(float minX, float minY, float minZ, float minW, float maxX, float maxY, float maxZ, float maxW);
public static void glPrimitiveBoundingBoxEXT(float minX, float minY, float minZ, float minW, float maxX, float maxY, float maxZ, float maxW) {
nglPrimitiveBoundingBoxEXT(minX, minY, minZ, minW, maxX, maxY, maxZ, maxW);
}
}