是否可以在精灵内部使用像素着色器?

发布于 2024-08-11 06:27:01 字数 177 浏览 3 评论 0原文

是否可以在精灵内部使用像素着色器?

我创建了一个简单的像素着色器,只写红色,用于 测试。 我已将 Sprite.DrawImage(tex,...) 调用包围起来 effect.Begin(...)、BeginPass(0) 和 EndPass()、End()、 但我的着色器似乎没有被使用:我的纹理只是绘制的 通常情况下。

Is it possible to use a pixel shader inside a sprite?

I have create a simple pixel shader, that just writes red color, for
testing.
I have surrounded my Sprite.DrawImage(tex,...) call by the
effect.Begin(...), BeginPass(0), and EndPass(), End(),
but my shader seems not to be used : My texture is drawn just
normally.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

忆伤 2024-08-18 06:27:01

我不确定你使用的是什么语言。我假设这是一个 XNA 问题。

是否可以使用像素着色器
在精灵里面?

的,您可以加载着色器文件(HLSL,XNA 中最高可达并包括着色器模型 3)并使用它调用 spritebatch。

如果您发布示例代码,我们将更容易查看是否有任何设置不正确。然而,看起来你的事情顺序是正确的。我会检查着色器代码。

您的应用程序代码应如下所示:

Effect effect; 
effect = Content.Load<Effect> ("customeffect"); //load "customeffect.fx"
effect.CurrentTechnique = effect.Techniques["customtechnique"];

effect.Begin();

foreach (EffectPass pass in effect.CurrentTechnique.Passes)
 {
     pass.Begin();

     spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);

     spriteBatch.Draw(texture, Vector2.Zero, null, Color.White, 0, new Vector2(20, 20), 1, SpriteEffects.None, 0);

     spriteBatch.End();

     pass.End();
 }

 effect.End();

I am not sure what language you are using. I will assume this is an XNA question.

Is it possible to use a pixel shader
inside a sprite?

Yes, you can load a shader file (HLSL, up to and including shader model 3 in XNA) and call spritebatch with using it.

If you post sample code it would be easier for us to see if anything isn't setup properly. However, It looks like you have things in the right order. I would check the shader code.

Your application code should look something like this:

Effect effect; 
effect = Content.Load<Effect> ("customeffect"); //load "customeffect.fx"
effect.CurrentTechnique = effect.Techniques["customtechnique"];

effect.Begin();

foreach (EffectPass pass in effect.CurrentTechnique.Passes)
 {
     pass.Begin();

     spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None);

     spriteBatch.Draw(texture, Vector2.Zero, null, Color.White, 0, new Vector2(20, 20), 1, SpriteEffects.None, 0);

     spriteBatch.End();

     pass.End();
 }

 effect.End();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文