GMS2图形着色器仅在DrawGUI中工作

如何解决GMS2图形着色器仅在DrawGUI中工作

因此,我对着色器非常陌生,并且正在使用GMS2市场上的免费着色器>无论如何,我遇到了与该着色器有关的问题,我想我在着色器中还太陌生,无法对此有所了解。 着色器的代码是:

shd_mosaic.vsh

attribute vec3 in_Position;
attribute vec4 in_Colour;
attribute vec2 in_TextureCoord;

varying vec2 v_texcoord;

void main()
{
    gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * vec4(in_Position,1.0);
    v_texcoord = in_TextureCoord;
}

shd_mosaic.fsh:

varying vec2 v_texcoord;

uniform float time;
uniform vec2 mouse_pos;
uniform vec2 resolution;
uniform float pixel_amount;

void main()
{ 
    vec2 res = vec2(1.0,resolution.x/resolution.y);
    vec2 size = vec2(res.x/pixel_amount,res.y/pixel_amount);
    vec2 uv = v_texcoord - mod(v_texcoord,size);
    gl_FragColor = texture2D( gm_BaseTexture,uv );
}

然后我还有一个管理着色器的对象obj_controller_mosaic

创建代码

draw_set_color(c_white);

uni_time = shader_get_uniform(shd_mosaic,"time");
var_time_var = 0;

uni_mouse_pos = shader_get_uniform(shd_mosaic,"mouse_pos");
var_mouse_pos_x = mouse_x - camera_get_view_x(view_get_camera(view_current));
var_mouse_pos_y = mouse_y - camera_get_view_y(view_get_camera(view_current));

uni_resolution = shader_get_uniform(shd_mosaic,"resolution");
var_resolution_x = room_width //camera_get_view_width(view_get_camera(view_current));
var_resolution_y = room_height //camera_get_view_height(view_get_camera(view_current));

uni_pixel_amount = shader_get_uniform(shd_mosaic,"pixel_amount");
var_pixel_amount = 700.0;

shader_enabled = true;
full_screen_effect = true;

surf = surface_create(camera_get_view_width(view_get_camera(view_current)),camera_get_view_height(view_get_camera(view_current)));
view_set_surface_id(view_get_camera(view_current),surf);

DrawGUI 代码

var_time_var+=0.04;

var_resolution_x = camera_get_view_width(view_get_camera(view_current));
var_resolution_y = camera_get_view_height(view_get_camera(view_current)); 

if shader_enabled shader_set(shd_mosaic);
    shader_set_uniform_f(uni_time,var_time_var);
    shader_set_uniform_f(uni_mouse_pos,var_mouse_pos_x,var_mouse_pos_y);
    shader_set_uniform_f(uni_resolution,var_resolution_x,var_resolution_y);
    shader_set_uniform_f(uni_pixel_amount,var_pixel_amount);
    if full_screen_effect draw_surface(surf,0);
shader_reset();

好的,现在由于游戏中其他对象的某些问题,我希望DrawGUI代码实际上位于Draw事件中。问题是,当我将代码复制到Draw事件上时,我只是得到了黑屏(当代码在DrawGUI事件中时,它可以正常工作)。我可以做些什么来使此代码在Draw事件而不是DrawGUI中起作用吗?预先感谢您的回答!

解决方法

view_set_surface_id使视图渲染到表面。结果,它不会自动绘制到屏幕上-您必须自己做,就像在Draw GUI中一样。

如果您真的需要在常规绘制事件中绘制视图,则需要第二个视图并在Draw事件中基于view_current进行过滤。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?