/** * Calculates the mask based on {@link VertexAttributes#getMask()} and packs the attributes count into the last 32 bits. * @return the mask with attributes count packed into the last 32 bits. */ public long getMaskWithSizePacked () { return getMask() | ((long)attributes.length << 32); }
/** * Calculates the mask based on {@link VertexAttributes#getMask()} and packs the attributes count into the last 32 bits. * @return the mask with attributes count packed into the last 32 bits. */ public long getMaskWithSizePacked () { return getMask() | ((long)attributes.length << 32); }
@Override public int compareTo (VertexAttributes o) { if (attributes.length != o.attributes.length) return attributes.length - o.attributes.length; final long m1 = getMask(); final long m2 = o.getMask(); if (m1 != m2) return m1 < m2 ? -1 : 1; for (int i = attributes.length - 1; i >= 0; --i) { final VertexAttribute va0 = attributes[i]; final VertexAttribute va1 = o.attributes[i]; if (va0.usage != va1.usage) return va0.usage - va1.usage; if (va0.unit != va1.unit) return va0.unit - va1.unit; if (va0.numComponents != va1.numComponents) return va0.numComponents - va1.numComponents; if (va0.normalized != va1.normalized) return va0.normalized ? 1 : -1; if (va0.type != va1.type) return va0.type - va1.type; } return 0; }
@Override public int compareTo (VertexAttributes o) { if (attributes.length != o.attributes.length) return attributes.length - o.attributes.length; final long m1 = getMask(); final long m2 = o.getMask(); if (m1 != m2) return m1 < m2 ? -1 : 1; for (int i = attributes.length - 1; i >= 0; --i) { final VertexAttribute va0 = attributes[i]; final VertexAttribute va1 = o.attributes[i]; if (va0.usage != va1.usage) return va0.usage - va1.usage; if (va0.unit != va1.unit) return va0.unit - va1.unit; if (va0.numComponents != va1.numComponents) return va0.numComponents - va1.numComponents; if (va0.normalized != va1.normalized) return va0.normalized ? 1 : -1; if (va0.type != va1.type) return va0.type - va1.type; } return 0; }
@Override public boolean canRender (final Renderable renderable) { return (materialMask == (renderable.material.getMask() | optionalAttributes)) && (vertexMask == renderable.meshPart.mesh.getVertexAttributes().getMask()); }
@Override public boolean canRender (final Renderable renderable) { return (materialMask == (renderable.material.getMask() | optionalAttributes)) && (vertexMask == renderable.meshPart.mesh.getVertexAttributes().getMask()); }
@Override public boolean canRender (Renderable renderable) { final Attributes attributes = combineAttributes(renderable); if (attributes.has(BlendingAttribute.Type)) { if ((attributesMask & BlendingAttribute.Type) != BlendingAttribute.Type) return false; if (attributes.has(TextureAttribute.Diffuse) != ((attributesMask & TextureAttribute.Diffuse) == TextureAttribute.Diffuse)) return false; } final boolean skinned = ((renderable.meshPart.mesh.getVertexAttributes().getMask() & Usage.BoneWeight) == Usage.BoneWeight); if (skinned != (numBones > 0)) return false; if (!skinned) return true; int w = 0; final int n = renderable.meshPart.mesh.getVertexAttributes().size(); for (int i = 0; i < n; i++) { final VertexAttribute attr = renderable.meshPart.mesh.getVertexAttributes().get(i); if (attr.usage == Usage.BoneWeight) w |= (1 << attr.unit); } return w == weights; }
@Override public boolean canRender (Renderable renderable) { final Attributes attributes = combineAttributes(renderable); if (attributes.has(BlendingAttribute.Type)) { if ((attributesMask & BlendingAttribute.Type) != BlendingAttribute.Type) return false; if (attributes.has(TextureAttribute.Diffuse) != ((attributesMask & TextureAttribute.Diffuse) == TextureAttribute.Diffuse)) return false; } final boolean skinned = ((renderable.meshPart.mesh.getVertexAttributes().getMask() & Usage.BoneWeight) == Usage.BoneWeight); if (skinned != (numBones > 0)) return false; if (!skinned) return true; int w = 0; final int n = renderable.meshPart.mesh.getVertexAttributes().size(); for (int i = 0; i < n; i++) { final VertexAttribute attr = renderable.meshPart.mesh.getVertexAttributes().get(i); if (attr.usage == Usage.BoneWeight) w |= (1 << attr.unit); } return w == weights; }
public ParticleShader (final Renderable renderable, final Config config, final ShaderProgram shaderProgram) { this.config = config; this.program = shaderProgram; this.renderable = renderable; materialMask = renderable.material.getMask() | optionalAttributes; vertexMask = renderable.meshPart.mesh.getVertexAttributes().getMask(); if (!config.ignoreUnimplemented && (implementedFlags & materialMask) != materialMask) throw new GdxRuntimeException("Some attributes not implemented yet (" + materialMask + ")"); // Global uniforms register(DefaultShader.Inputs.viewTrans, DefaultShader.Setters.viewTrans); register(DefaultShader.Inputs.projViewTrans, DefaultShader.Setters.projViewTrans); register(DefaultShader.Inputs.projTrans, DefaultShader.Setters.projTrans); register(Inputs.screenWidth, Setters.screenWidth); register(DefaultShader.Inputs.cameraUp, Setters.cameraUp); register(Inputs.cameraRight, Setters.cameraRight); register(Inputs.cameraInvDirection, Setters.cameraInvDirection); register(DefaultShader.Inputs.cameraPosition, Setters.cameraPosition); // Object uniforms register(DefaultShader.Inputs.diffuseTexture, DefaultShader.Setters.diffuseTexture); }
public ParticleShader (final Renderable renderable, final Config config, final ShaderProgram shaderProgram) { this.config = config; this.program = shaderProgram; this.renderable = renderable; materialMask = renderable.material.getMask() | optionalAttributes; vertexMask = renderable.meshPart.mesh.getVertexAttributes().getMask(); if (!config.ignoreUnimplemented && (implementedFlags & materialMask) != materialMask) throw new GdxRuntimeException("Some attributes not implemented yet (" + materialMask + ")"); // Global uniforms register(DefaultShader.Inputs.viewTrans, DefaultShader.Setters.viewTrans); register(DefaultShader.Inputs.projViewTrans, DefaultShader.Setters.projViewTrans); register(DefaultShader.Inputs.projTrans, DefaultShader.Setters.projTrans); register(Inputs.screenWidth, Setters.screenWidth); register(DefaultShader.Inputs.cameraUp, Setters.cameraUp); register(Inputs.cameraRight, Setters.cameraRight); register(Inputs.cameraInvDirection, Setters.cameraInvDirection); register(DefaultShader.Inputs.cameraPosition, Setters.cameraPosition); // Object uniforms register(DefaultShader.Inputs.diffuseTexture, DefaultShader.Setters.diffuseTexture); }
String prefix = ""; final long attributesMask = attributes.getMask(); final long vertexMask = renderable.meshPart.mesh.getVertexAttributes().getMask(); if (and(vertexMask, Usage.Position)) prefix += "#define positionFlag\n"; if (or(vertexMask, Usage.ColorUnpacked | Usage.ColorPacked)) prefix += "#define colorFlag\n";
String prefix = ""; final long attributesMask = attributes.getMask(); final long vertexMask = renderable.meshPart.mesh.getVertexAttributes().getMask(); if (and(vertexMask, Usage.Position)) prefix += "#define positionFlag\n"; if (or(vertexMask, Usage.ColorUnpacked | Usage.ColorPacked)) prefix += "#define colorFlag\n";
/** Add a box. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, Vector3 corner000, Vector3 corner010, Vector3 corner100, Vector3 corner110, Vector3 corner001, Vector3 corner011, Vector3 corner101, Vector3 corner111) { if ((builder.getAttributes().getMask() & (Usage.Normal | Usage.BiNormal | Usage.Tangent | Usage.TextureCoordinates)) == 0) { build(builder, vertTmp1.set(corner000, null, null, null), vertTmp2.set(corner010, null, null, null), vertTmp3.set(corner100, null, null, null), vertTmp4.set(corner110, null, null, null), vertTmp5.set(corner001, null, null, null), vertTmp6.set(corner011, null, null, null), vertTmp7.set(corner101, null, null, null), vertTmp8.set(corner111, null, null, null)); } else { builder.ensureVertices(24); builder.ensureRectangleIndices(6); Vector3 nor = tmpV1.set(corner000).lerp(corner110, 0.5f).sub(tmpV2.set(corner001).lerp(corner111, 0.5f)).nor(); builder.rect(corner000, corner010, corner110, corner100, nor); builder.rect(corner011, corner001, corner101, corner111, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner101, 0.5f).sub(tmpV2.set(corner010).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner000, corner100, corner101, nor); builder.rect(corner010, corner011, corner111, corner110, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner011, 0.5f).sub(tmpV2.set(corner100).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner011, corner010, corner000, nor); builder.rect(corner100, corner110, corner111, corner101, nor.scl(-1)); } }
/** Add a box. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, Vector3 corner000, Vector3 corner010, Vector3 corner100, Vector3 corner110, Vector3 corner001, Vector3 corner011, Vector3 corner101, Vector3 corner111) { if ((builder.getAttributes().getMask() & (Usage.Normal | Usage.BiNormal | Usage.Tangent | Usage.TextureCoordinates)) == 0) { build(builder, vertTmp1.set(corner000, null, null, null), vertTmp2.set(corner010, null, null, null), vertTmp3.set(corner100, null, null, null), vertTmp4.set(corner110, null, null, null), vertTmp5.set(corner001, null, null, null), vertTmp6.set(corner011, null, null, null), vertTmp7.set(corner101, null, null, null), vertTmp8.set(corner111, null, null, null)); } else { builder.ensureVertices(24); builder.ensureRectangleIndices(6); Vector3 nor = tmpV1.set(corner000).lerp(corner110, 0.5f).sub(tmpV2.set(corner001).lerp(corner111, 0.5f)).nor(); builder.rect(corner000, corner010, corner110, corner100, nor); builder.rect(corner011, corner001, corner101, corner111, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner101, 0.5f).sub(tmpV2.set(corner010).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner000, corner100, corner101, nor); builder.rect(corner010, corner011, corner111, corner110, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner011, 0.5f).sub(tmpV2.set(corner100).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner011, corner010, corner000, nor); builder.rect(corner100, corner110, corner111, corner101, nor.scl(-1)); } }
/** * Calculates the mask based on {@link VertexAttributes#getMask()} and packs the attributes count into the last 32 bits. * @return the mask with attributes count packed into the last 32 bits. */ public long getMaskWithSizePacked () { return getMask() | ((long)attributes.length << 32); }
@Override public int compareTo (VertexAttributes o) { if (attributes.length != o.attributes.length) return attributes.length - o.attributes.length; final long m1 = getMask(); final long m2 = o.getMask(); if (m1 != m2) return m1 < m2 ? -1 : 1; for (int i = attributes.length - 1; i >= 0; --i) { final VertexAttribute va0 = attributes[i]; final VertexAttribute va1 = o.attributes[i]; if (va0.usage != va1.usage) return va0.usage - va1.usage; if (va0.unit != va1.unit) return va0.unit - va1.unit; if (va0.numComponents != va1.numComponents) return va0.numComponents - va1.numComponents; if (va0.normalized != va1.normalized) return va0.normalized ? 1 : -1; if (va0.type != va1.type) return va0.type - va1.type; } return 0; }
@Override public boolean canRender (final Renderable renderable) { return (materialMask == (renderable.material.getMask() | optionalAttributes)) && (vertexMask == renderable.meshPart.mesh.getVertexAttributes().getMask()); }
@Override public boolean canRender (Renderable renderable) { final Attributes attributes = combineAttributes(renderable); if (attributes.has(BlendingAttribute.Type)) { if ((attributesMask & BlendingAttribute.Type) != BlendingAttribute.Type) return false; if (attributes.has(TextureAttribute.Diffuse) != ((attributesMask & TextureAttribute.Diffuse) == TextureAttribute.Diffuse)) return false; } final boolean skinned = ((renderable.meshPart.mesh.getVertexAttributes().getMask() & Usage.BoneWeight) == Usage.BoneWeight); if (skinned != (numBones > 0)) return false; if (!skinned) return true; int w = 0; final int n = renderable.meshPart.mesh.getVertexAttributes().size(); for (int i = 0; i < n; i++) { final VertexAttribute attr = renderable.meshPart.mesh.getVertexAttributes().get(i); if (attr.usage == Usage.BoneWeight) w |= (1 << attr.unit); } return w == weights; }
public ParticleShader (final Renderable renderable, final Config config, final ShaderProgram shaderProgram) { this.config = config; this.program = shaderProgram; this.renderable = renderable; materialMask = renderable.material.getMask() | optionalAttributes; vertexMask = renderable.meshPart.mesh.getVertexAttributes().getMask(); if (!config.ignoreUnimplemented && (implementedFlags & materialMask) != materialMask) throw new GdxRuntimeException("Some attributes not implemented yet (" + materialMask + ")"); // Global uniforms register(DefaultShader.Inputs.viewTrans, DefaultShader.Setters.viewTrans); register(DefaultShader.Inputs.projViewTrans, DefaultShader.Setters.projViewTrans); register(DefaultShader.Inputs.projTrans, DefaultShader.Setters.projTrans); register(Inputs.screenWidth, Setters.screenWidth); register(DefaultShader.Inputs.cameraUp, Setters.cameraUp); register(Inputs.cameraRight, Setters.cameraRight); register(Inputs.cameraInvDirection, Setters.cameraInvDirection); register(DefaultShader.Inputs.cameraPosition, Setters.cameraPosition); // Object uniforms register(DefaultShader.Inputs.diffuseTexture, DefaultShader.Setters.diffuseTexture); }
/** Add a box. Requires GL_POINTS, GL_LINES or GL_TRIANGLES primitive type. */ public static void build (MeshPartBuilder builder, Vector3 corner000, Vector3 corner010, Vector3 corner100, Vector3 corner110, Vector3 corner001, Vector3 corner011, Vector3 corner101, Vector3 corner111) { if ((builder.getAttributes().getMask() & (Usage.Normal | Usage.BiNormal | Usage.Tangent | Usage.TextureCoordinates)) == 0) { build(builder, vertTmp1.set(corner000, null, null, null), vertTmp2.set(corner010, null, null, null), vertTmp3.set(corner100, null, null, null), vertTmp4.set(corner110, null, null, null), vertTmp5.set(corner001, null, null, null), vertTmp6.set(corner011, null, null, null), vertTmp7.set(corner101, null, null, null), vertTmp8.set(corner111, null, null, null)); } else { builder.ensureVertices(24); builder.ensureRectangleIndices(6); Vector3 nor = tmpV1.set(corner000).lerp(corner110, 0.5f).sub(tmpV2.set(corner001).lerp(corner111, 0.5f)).nor(); builder.rect(corner000, corner010, corner110, corner100, nor); builder.rect(corner011, corner001, corner101, corner111, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner101, 0.5f).sub(tmpV2.set(corner010).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner000, corner100, corner101, nor); builder.rect(corner010, corner011, corner111, corner110, nor.scl(-1)); nor = tmpV1.set(corner000).lerp(corner011, 0.5f).sub(tmpV2.set(corner100).lerp(corner111, 0.5f)).nor(); builder.rect(corner001, corner011, corner010, corner000, nor); builder.rect(corner100, corner110, corner111, corner101, nor.scl(-1)); } }