Дебаг режим для коготак ало в чем проблема белого экрана я не ебу в душе даже
Дебаг режим для коготак ало в чем проблема белого экрана я не ебу в душе даже
public class ShaderUtils implements Util {
public static ShaderUtils MAIN_MENU;
private final int shaderID = GL20.glCreateProgram();
public ShaderUtils(String string) {
GL20.glAttachShader(this.shaderID, this.createShader(string));
GL20.glLinkProgram(this.shaderID);
}
public static void init() {
MAIN_MENU = new ShaderUtils("#ifdef GL_ES\n" +
"precision mediump float;\n" +
"#endif\n" +
"\n" +
"#extension GL_OES_standard_derivatives : enable\n" +
"\n" +
"#define NUM_OCTAVES 16\n" +
"\n" +
"uniform float time;\n" +
"uniform vec2 resolution;\n" +
"\n" +
"mat3 rotX(float a) {\n" +
" float c = cos(a);\n" +
" float s = sin(a);\n" +
" return mat3(\n" +
" 1, 0, 0,\n" +
" 0, c, -s,\n" +
" 0, s, c\n" +
" );\n" +
"}\n" +
"mat3 rotY(float a) {\n" +
" float c = cos(a);\n" +
" float s = sin(a);\n" +
" return mat3(\n" +
" c, 0, -s,\n" +
" 0, 1, 0,\n" +
" s, 0, c\n" +
" );\n" +
"}\n" +
"\n" +
"float random(vec2 pos) {\n" +
" return fract(sin(dot(pos.xy, vec2(1399.9898, 78.233))) * 43758.5453123);\n" +
"}\n" +
"\n" +
"float noise(vec2 pos) {\n" +
" vec2 i = floor(pos);\n" +
" vec2 f = fract(pos);\n" +
" float a = random(i + vec2(0.0, 0.0));\n" +
" float b = random(i + vec2(1.0, 0.0));\n" +
" float c = random(i + vec2(0.0, 1.0));\n" +
" float d = random(i + vec2(1.0, 1.0));\n" +
" vec2 u = f * f * (3.0 - 2.0 * f);\n" +
" return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n" +
"}\n" +
"\n" +
"float fbm(vec2 pos) {\n" +
" float v = 0.0;\n" +
" float a = 0.5;\n" +
" vec2 shift = vec2(100.0);\n" +
" mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.5));\n" +
" for (int i=0; i<NUM_OCTAVES; i++) {\n" +
" v += a * noise(pos);\n" +
" pos = rot * pos * 2.0 + shift;\n" +
" a *= 0.5;\n" +
" }\n" +
" return v;\n" +
"}\n" +
"\n" +
"void main(void) {\n" +
" vec2 p = (gl_FragCoord.xy * 1.0 - resolution.xy) / min(resolution.x, resolution.y);\n" +
"\n" +
" float t = 0.0, d;\n" +
"\n" +
" float time2 = 0.6 * time / 2.0;\n" +
"\n" +
" vec2 q = vec2(0.0);\n" +
" q.x = fbm(p + 0.30 * time2);\n" +
" q.y = fbm(p + vec2(1.0));\n" +
" vec2 r = vec2(0.0);\n" +
" r.x = fbm(p + 1.0 * q + vec2(1.2, 3.2) + 0.135 * time2);\n" +
" r.y = fbm(p + 1.0 * q + vec2(8.8, 2.8) + 0.126 * time2);\n" +
" float f = fbm(p + r);\n" +
" vec3 color = mix(\n" +
" vec3(0.0, 0.0, 0),\n" +
" vec3(1, 0, 0.7),\n" +
" clamp((f * f) * 8.0, 0.0, 5.0)\n" +
" );\n" +
"\n" +
" color = mix(\n" +
" color,\n" +
" vec3(0, 0, 1),\n" +
" clamp(length(q), 0.0, 1.0)\n" +
" );\n" +
"\n" +
"\n" +
" color = mix(\n" +
" color,\n" +
" vec3(1, 1, 1),\n" +
" clamp(length(r.x), 0.0, 1.0)\n" +
" );\n" +
"\n" +
" color = (f * f * f + 0.6 * f * f + 0.9 * f) * color;\n" +
"\n" +
" gl_FragColor = vec4(color, 1.0);\n" +
"}");
}
public void drawQuads(float x, float y, float width, float height) {
buffer.begin(9, DefaultVertexFormats.POSITION_TEX);
buffer.pos(x, y).tex(0.0f, 0.0f).endVertex();
buffer.pos(x, y + height).tex(0.0f, 1.0f).endVertex();
buffer.pos(x + width, y + height).tex(1.0f, 1.0f).endVertex();
buffer.pos(x + width, y).tex(1.0f, 0.0f).endVertex();
tessellator.draw();
}
public void begin() {
GL20.glUseProgram(this.shaderID);
}
public void end() {
GL20.glUseProgram(0);
}
public void setUniform(String string, float ... fArray) {
int n = GL20.glGetUniformLocation(this.shaderID, string);
switch (fArray.length) {
case 1: {
ARBShaderObjects.glUniform1fARB(n, fArray[0]);
break;
}
case 2: {
ARBShaderObjects.glUniform2fARB(n, fArray[0], fArray[1]);
break;
}
case 3: {
ARBShaderObjects.glUniform3fARB(n, fArray[0], fArray[1], fArray[2]);
break;
}
case 4: {
ARBShaderObjects.glUniform4fARB(n, fArray[0], fArray[1], fArray[2], fArray[3]);
}
}
}
private int createShader(String string) {
int gled = GL20.glCreateShader(35632);
GL20.glShaderSource(gled, (CharSequence)FileUtil.readInputStream(new ByteArrayInputStream(string.getBytes())));
GL20.glCompileShader(gled);
return gled;
}
}
ShaderUtils.MAIN_MENU.begin();
ShaderUtils.MAIN_MENU.setUniform("time", mc.timer.getPartialTicks(1) / 20.0F);
ShaderUtils.MAIN_MENU.setUniform("resolution", mc.getMainWindow().getScaledWidth(), mc.getMainWindow().getScaledHeight());
ShaderUtils.MAIN_MENU.drawQuads(0,0, mc.getMainWindow().getScaledWidth(), mc.getMainWindow().getScaledHeight());
ShaderUtils.MAIN_MENU.end();
прокароче, челы кто не может починить белый экран, то вот вам нормальный shaderutils
дальше пишем в Expensive.java в методе clientLoad()ShaderUtils.java:public class ShaderUtils implements Util { public static ShaderUtils MAIN_MENU; private final int shaderID = GL20.glCreateProgram(); public ShaderUtils(String string) { GL20.glAttachShader(this.shaderID, this.createShader(string)); GL20.glLinkProgram(this.shaderID); } public static void init() { MAIN_MENU = new ShaderUtils("#ifdef GL_ES\n" + "precision mediump float;\n" + "#endif\n" + "\n" + "#extension GL_OES_standard_derivatives : enable\n" + "\n" + "#define NUM_OCTAVES 16\n" + "\n" + "uniform float time;\n" + "uniform vec2 resolution;\n" + "\n" + "mat3 rotX(float a) {\n" + " float c = cos(a);\n" + " float s = sin(a);\n" + " return mat3(\n" + " 1, 0, 0,\n" + " 0, c, -s,\n" + " 0, s, c\n" + " );\n" + "}\n" + "mat3 rotY(float a) {\n" + " float c = cos(a);\n" + " float s = sin(a);\n" + " return mat3(\n" + " c, 0, -s,\n" + " 0, 1, 0,\n" + " s, 0, c\n" + " );\n" + "}\n" + "\n" + "float random(vec2 pos) {\n" + " return fract(sin(dot(pos.xy, vec2(1399.9898, 78.233))) * 43758.5453123);\n" + "}\n" + "\n" + "float noise(vec2 pos) {\n" + " vec2 i = floor(pos);\n" + " vec2 f = fract(pos);\n" + " float a = random(i + vec2(0.0, 0.0));\n" + " float b = random(i + vec2(1.0, 0.0));\n" + " float c = random(i + vec2(0.0, 1.0));\n" + " float d = random(i + vec2(1.0, 1.0));\n" + " vec2 u = f * f * (3.0 - 2.0 * f);\n" + " return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;\n" + "}\n" + "\n" + "float fbm(vec2 pos) {\n" + " float v = 0.0;\n" + " float a = 0.5;\n" + " vec2 shift = vec2(100.0);\n" + " mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.5));\n" + " for (int i=0; i<NUM_OCTAVES; i++) {\n" + " v += a * noise(pos);\n" + " pos = rot * pos * 2.0 + shift;\n" + " a *= 0.5;\n" + " }\n" + " return v;\n" + "}\n" + "\n" + "void main(void) {\n" + " vec2 p = (gl_FragCoord.xy * 1.0 - resolution.xy) / min(resolution.x, resolution.y);\n" + "\n" + " float t = 0.0, d;\n" + "\n" + " float time2 = 0.6 * time / 2.0;\n" + "\n" + " vec2 q = vec2(0.0);\n" + " q.x = fbm(p + 0.30 * time2);\n" + " q.y = fbm(p + vec2(1.0));\n" + " vec2 r = vec2(0.0);\n" + " r.x = fbm(p + 1.0 * q + vec2(1.2, 3.2) + 0.135 * time2);\n" + " r.y = fbm(p + 1.0 * q + vec2(8.8, 2.8) + 0.126 * time2);\n" + " float f = fbm(p + r);\n" + " vec3 color = mix(\n" + " vec3(0.0, 0.0, 0),\n" + " vec3(1, 0, 0.7),\n" + " clamp((f * f) * 8.0, 0.0, 5.0)\n" + " );\n" + "\n" + " color = mix(\n" + " color,\n" + " vec3(0, 0, 1),\n" + " clamp(length(q), 0.0, 1.0)\n" + " );\n" + "\n" + "\n" + " color = mix(\n" + " color,\n" + " vec3(1, 1, 1),\n" + " clamp(length(r.x), 0.0, 1.0)\n" + " );\n" + "\n" + " color = (f * f * f + 0.6 * f * f + 0.9 * f) * color;\n" + "\n" + " gl_FragColor = vec4(color, 1.0);\n" + "}"); } public void drawQuads(float x, float y, float width, float height) { buffer.begin(9, DefaultVertexFormats.POSITION_TEX); buffer.pos(x, y).tex(0.0f, 0.0f).endVertex(); buffer.pos(x, y + height).tex(0.0f, 1.0f).endVertex(); buffer.pos(x + width, y + height).tex(1.0f, 1.0f).endVertex(); buffer.pos(x + width, y).tex(1.0f, 0.0f).endVertex(); tessellator.draw(); } public void begin() { GL20.glUseProgram(this.shaderID); } public void end() { GL20.glUseProgram(0); } public void setUniform(String string, float ... fArray) { int n = GL20.glGetUniformLocation(this.shaderID, string); switch (fArray.length) { case 1: { ARBShaderObjects.glUniform1fARB(n, fArray[0]); break; } case 2: { ARBShaderObjects.glUniform2fARB(n, fArray[0], fArray[1]); break; } case 3: { ARBShaderObjects.glUniform3fARB(n, fArray[0], fArray[1], fArray[2]); break; } case 4: { ARBShaderObjects.glUniform4fARB(n, fArray[0], fArray[1], fArray[2], fArray[3]); } } } private int createShader(String string) { int gled = GL20.glCreateShader(35632); GL20.glShaderSource(gled, (CharSequence)FileUtil.readInputStream(new ByteArrayInputStream(string.getBytes()))); GL20.glCompileShader(gled); return gled; } }
ShaderUtils.init();
и для того чтобы использовать шейдер в мейн меню пастим следующий код в метод render в классе MainScreen
MainScreen.java:ShaderUtils.MAIN_MENU.begin(); ShaderUtils.MAIN_MENU.setUniform("time", mc.timer.getPartialTicks(1) / 20.0F); ShaderUtils.MAIN_MENU.setUniform("resolution", mc.getMainWindow().getScaledWidth(), mc.getMainWindow().getScaledHeight()); ShaderUtils.MAIN_MENU.drawQuads(0,0, mc.getMainWindow().getScaledWidth(), mc.getMainWindow().getScaledHeight()); ShaderUtils.MAIN_MENU.end();
""" """
не слышали?У меня и так работаетпро""" """
не слышали?
оно будет работать и так и так, но сУ меня и так работает
""" """
было бы удобнейpublic class ShaderUtils implements Util {
public static ShaderUtils MAIN_MENU;
private final int shaderID = GL20.glCreateProgram();
public ShaderUtils(String string) {
GL20.glAttachShader(this.shaderID, this.createShader(string));
GL20.glLinkProgram(this.shaderID);
}
public static void init() {
MAIN_MENU = new ShaderUtils("""
#ifdef GL_ES
precision mediump float;
#endif
#extension GL_OES_standard_derivatives : enable
#define NUM_OCTAVES 16
uniform float time;
uniform vec2 resolution;
mat3 rotX(float a) {
float c = cos(a);
float s = sin(a);
return mat3(
1, 0, 0,
0, c, -s,
0, s, c
);
}
mat3 rotY(float a) {
float c = cos(a);
float s = sin(a);
return mat3(
c, 0, -s,
0, 1, 0,
s, 0, c
);
}
float random(vec2 pos) {
return fract(sin(dot(pos.xy, vec2(1399.9898, 78.233))) * 43758.5453123);
}
float noise(vec2 pos) {
vec2 i = floor(pos);
vec2 f = fract(pos);
float a = random(i + vec2(0.0, 0.0));
float b = random(i + vec2(1.0, 0.0));
float c = random(i + vec2(0.0, 1.0));
float d = random(i + vec2(1.0, 1.0));
vec2 u = f * f * (3.0 - 2.0 * f);
return mix(a, b, u.x) + (c - a) * u.y * (1.0 - u.x) + (d - b) * u.x * u.y;
}
float fbm(vec2 pos) {
float v = 0.0;
float a = 0.5;
vec2 shift = vec2(100.0);
mat2 rot = mat2(cos(0.5), sin(0.5), -sin(0.5), cos(0.5));
for (int i=0; i<NUM_OCTAVES; i++) {
v += a * noise(pos);
pos = rot * pos * 2.0 + shift;
a *= 0.5;
}
return v;
}
void main(void) {
vec2 p = (gl_FragCoord.xy * 1.0 - resolution.xy) / min(resolution.x, resolution.y);
float t = 0.0, d;
float time2 = 0.6 * time / 2.0;
vec2 q = vec2(0.0);
q.x = fbm(p + 0.30 * time2);
q.y = fbm(p + vec2(1.0));
vec2 r = vec2(0.0);
r.x = fbm(p + 1.0 * q + vec2(1.2, 3.2) + 0.135 * time2);
r.y = fbm(p + 1.0 * q + vec2(8.8, 2.8) + 0.126 * time2);
float f = fbm(p + r);
vec3 color = mix(
vec3(0.0, 0.0, 0),
vec3(1, 0, 0.7),
clamp((f * f) * 8.0, 0.0, 5.0)
);
color = mix(
color,
vec3(0, 0, 1),
clamp(length(q), 0.0, 1.0)
);
color = mix(
color,
vec3(1, 1, 1),
clamp(length(r.x), 0.0, 1.0)
);
color = (f * f * f + 0.6 * f * f + 0.9 * f) * color;
gl_FragColor = vec4(color, 1.0);
}
""");
}
public void drawQuads(float x, float y, float width, float height) {
buffer.begin(9, DefaultVertexFormats.POSITION_TEX);
buffer.pos(x, y).tex(0.0f, 0.0f).endVertex();
buffer.pos(x, y + height).tex(0.0f, 1.0f).endVertex();
buffer.pos(x + width, y + height).tex(1.0f, 1.0f).endVertex();
buffer.pos(x + width, y).tex(1.0f, 0.0f).endVertex();
tessellator.draw();
}
public void begin() {
GL20.glUseProgram(this.shaderID);
}
public void end() {
GL20.glUseProgram(0);
}
public void setUniform(String string, float ... fArray) {
int n = GL20.glGetUniformLocation(this.shaderID, string);
switch (fArray.length) {
case 1: {
ARBShaderObjects.glUniform1fARB(n, fArray[0]);
break;
}
case 2: {
ARBShaderObjects.glUniform2fARB(n, fArray[0], fArray[1]);
break;
}
case 3: {
ARBShaderObjects.glUniform3fARB(n, fArray[0], fArray[1], fArray[2]);
break;
}
case 4: {
ARBShaderObjects.glUniform4fARB(n, fArray[0], fArray[1], fArray[2], fArray[3]);
}
}
}
private int createShader(String string) {
int gled = GL20.glCreateShader(35632);
GL20.glShaderSource(gled, (CharSequence)FileUtil.readInputStream(new ByteArrayInputStream(string.getBytes())));
GL20.glCompileShader(gled);
return gled;
}
}
я выше кидал как сделать намного легче и без белого экранабелый экранчик
а почему не сделать так?
eeee:ShaderUtil.mainmenu.setUniform("resolution", (float)windowWidth, (float)windowHeight);
где это класс ShaderUtils создавать?я выше кидал как сделать намного легче и без белого экрана
Есть в мунварееще бы нахуй худ с шейдером сделал)
ебать ты отвечаешь быстроЕсть в мунваре
понебать ты отвечаешь быстро
я дурачьок конечно, но как фиксить1. Выбираем нужный шейдер
тута:Пожалуйста, авторизуйтесь для просмотра ссылки.(noad)
выбрали, нажимаем кнопку showcode слева сверху
переходим к пункту 2
2. Изменяем шейдер:
Заходим в код шейдера, ищем
uniform vec2 resolution
Меняем на:
uniform float w
uniform float h
Ищем строку похожую на эту:Посмотреть вложение 272616
Изменяемresolution.xy
наvec2(w,h)
Если в коде естьresolution.x
то меняем его наw
а ещё
Если в коде естьresolution.y
то меняем его наh
3. Создаём файл шейдера в экспенсиве
идём по путиim/expensive/utils/shader/shaders/
и создаём там файл Mainmenu.java
вставляем туда код:
после, меняем на строке 10 текстMainmenu.java:package im.expensive.utils.shader.shaders; import im.expensive.utils.shader.IShader; public class Mainmenu implements IShader { @Override public String glsl() { return """ шадер """; } }
шадер
на код шейдера который вы изменили в пункте 2
4. Регистрируем шейдер в списке шейдеров:
заходим в файлShaders.java
по путиim/expensive/utils/shader/
после 46 строки делаем новую строку и вставляем туда:
если возникает ошибка - Alt + Enter или импортируем шейдер черезJava:@Getter private IShader mainmenu = new Mainmenu();
import im.expensive.utils.shader.shaders.Mainmenu;
на 17 строку
5. Регистрируем шейдер в утилке:
заходим в файлShaderUtil.java
по путиim/expensive/utils/shader/
на 37 строку втсавляем:
public static ShaderUtil mainmenu = new ShaderUtil("Mainmenu");
6. Рендерим шейдер
заходим в файлMainScreen.java
по путиim/expensive/ui/mainmenu/
и вместо 106 строки вставляем такой код:
на 39 строку вставляем:Java:for(float i=0;i<1488;i++){ if(timer.isReached(10)){ o++; i=0; timer.reset(); } } GlStateManager.pushMatrix(); GlStateManager.enableBlend(); ShaderUtil.mainmenu.attach(); ShaderUtil.mainmenu.setUniform("time", o/4); ShaderUtil.mainmenu.setUniform("w", (float)windowWidth); ShaderUtil.mainmenu.setUniform("h", (float)windowHeight); drawQuads(0, 0, windowWidth, windowHeight, 7); ShaderUtil.mainmenu.detach(); GlStateManager.disableBlend(); GlStateManager.popMatrix();
гатово Посмотреть вложение 272622Java:public final StopWatch timer = new StopWatch(); public float o = 0;
((Плакать
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz