VulkanShader_1.21.10-0.0.4-alpha.jar
Download file
package net.vulkanmod.vulkan.texture;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTextureView;
import java.nio.ByteBuffer;
import net.vulkanmod.Initializer;
import net.vulkanmod.gl.VkGlTexture;
import net.vulkanmod.render.engine.VkGpuTexture;
import net.vulkanmod.render.texture.SpriteUpdateUtil;
import net.vulkanmod.vulkan.shader.Pipeline;
import net.vulkanmod.vulkan.shader.descriptor.ImageDescriptor;
import org.lwjgl.system.MemoryUtil;
public abstract class VTextureSelector {
public static final int SIZE = 12;
private static final VulkanImage[] boundTextures = new VulkanImage[12];
private static final int[] levels = new int[12];
private static final VulkanImage whiteTexture = VulkanImage.createWhiteTexture();
private static int activeTexture = 0;
public static void bindTexture(VulkanImage texture) {
boundTextures[0] = texture;
}
public static void bindTexture(int i, VulkanImage texture) {
if (i >= 0 && i < 12) {
boundTextures[i] = texture;
levels[i] = -1;
} else {
Initializer.LOGGER.error(String.format("On Texture binding: index %d out of range [0, %d]", i, 11));
}
}
public static void bindImage(int i, VulkanImage texture, int level) {
if (i >= 0 && i <= 7) {
boundTextures[i] = texture;
levels[i] = level;
} else {
Initializer.LOGGER.error(String.format("On Texture binding: index %d out of range [0, %d]", i, 11));
}
}
public static void uploadSubTexture(int mipLevel, int width, int height, int xOffset, int yOffset, int unpackSkipRows, int unpackSkipPixels, int unpackRowLength, ByteBuffer buffer) {
uploadSubTexture(mipLevel, 0, width, height, xOffset, yOffset, unpackSkipRows, unpackSkipPixels, unpackRowLength, MemoryUtil.memAddress(buffer));
}
public static void uploadSubTexture(int mipLevel, int arrayLayer, int width, int height, int xOffset, int yOffset, int unpackSkipRows, int unpackSkipPixels, int unpackRowLength, long bufferPtr) {
VulkanImage texture = boundTextures[activeTexture];
if (texture == null) {
throw new NullPointerException("Texture is null at index: " + activeTexture);
} else {
SpriteUpdateUtil.addTransitionedLayout(texture);
texture.uploadSubTextureAsync(mipLevel, arrayLayer, width, height, xOffset, yOffset, unpackSkipRows, unpackSkipPixels, unpackRowLength, bufferPtr);
}
}
public static int getTextureIdx(String name) {
byte var10000;
switch (name) {
case "Sampler0":
case "DiffuseSampler":
case "InSampler":
case "CloudFaces":
var10000 = 0;
break;
case "Sampler1":
case "BlurSampler":
var10000 = 1;
break;
case "Sampler2":
var10000 = 2;
break;
case "Sampler3":
var10000 = 3;
break;
case "Sampler4":
var10000 = 4;
break;
case "Sampler5":
var10000 = 5;
break;
case "Sampler6":
var10000 = 6;
break;
case "Sampler7":
var10000 = 7;
break;
default:
var10000 = -1;
}
return var10000;
}
public static void bindShaderTextures(Pipeline pipeline) {
for(ImageDescriptor state : pipeline.getImageDescriptors()) {
GpuTextureView textureView = RenderSystem.getShaderTexture(state.imageIdx);
if (textureView != null) {
VkGpuTexture gpuTexture = (VkGpuTexture)textureView.texture();
gpuTexture.flushModeChanges();
int shaderTexture = gpuTexture.method_68427();
VkGlTexture texture = VkGlTexture.getTexture(shaderTexture);
if (texture != null && texture.getVulkanImage() != null) {
bindTexture(state.imageIdx, texture.getVulkanImage());
}
}
}
}
public static VulkanImage getImage(int i) {
return boundTextures[i];
}
public static void setLightTexture(VulkanImage texture) {
boundTextures[2] = texture;
}
public static void setOverlayTexture(VulkanImage texture) {
boundTextures[1] = texture;
}
public static void setActiveTexture(int activeTexture) {
if (activeTexture < 0 || activeTexture >= 12) {
Initializer.LOGGER.error(String.format("On Texture binding: index %d out of range [0, %d]", activeTexture, 11));
}
VTextureSelector.activeTexture = activeTexture;
}
public static VulkanImage getBoundTexture() {
return boundTextures[activeTexture];
}
public static VulkanImage getBoundTexture(int i) {
return boundTextures[i];
}
public static VulkanImage getWhiteTexture() {
return whiteTexture;
}
}
Download file