小编jnm*_*nm2的帖子

HLSL 统一变量与常量缓冲区

统一缓冲区和常量缓冲区有什么区别?

它们是完全独立的还是可以将制服视为在恒定缓冲区中?换句话说,如果你想设置一个uniform,你需要一个常量缓冲区还是有其他方法?

我问这个问题是因为我有四个变量(float2平移、float缩放和float旋转),它们很可能不会同时改变。我是否需要一个恒定的缓冲区来一次设置它们,或者如果可能的话,单独设置它们是否更好?

hlsl

5
推荐指数
1
解决办法
3119
查看次数

List,Array还是其他什么?

我需要一个动态长度的数据结构,能够更改元素值.元素的顺序并不重要.

  • 如果我使用数组我可以修改我的元素,但我的长度有问题.解决方案是创建一个正确大小的新数组,并每次将所有元素复制到新数组中.不是一个好主意,因为元素的数量经常变化.

  • 最好使用通用列表,但修改过程非常复杂:首先我需要删除我想要更改的元素 - 通用列表似乎没有简单的"删除"/"删除"方法,所以我尝试了"过滤器" - 然后将修改后的元素添加到头部.它有效,但对于这么简单的事情来说有点太复杂了.

是否有一个数据结构允许我动态更改长度并修改元素,如可修改列表或动态大小的数组?

.net arrays f# list data-structures

4
推荐指数
2
解决办法
545
查看次数

解决C++名称冲突

InitializeQTML是QTML.h中的一个函数.我正在编写一个包装器,我想使用名称InitializeQTML作为包装器函数:

#include <QTML.h>

public class QuickTime
{ 
  public:  
    static void InitializeQTML(InitializationFlags flag) {
        InitializeQTML((long)flag));
    };
};
Run Code Online (Sandbox Code Playgroud)

如何从包装函数中引用原始的InitializeQTML函数并避免名称冲突而不重命名包装器?

c++ namespaces

3
推荐指数
1
解决办法
284
查看次数

有没有一种很好的方法来清除ICollection <T>而不知道T?

我有各种项目类型的集合列表.列表输入为List<IEnumerable>; 因为IEnumerable是唯一的非通用接口ICollection<T>,我需要在此列表中添加eg ICollection<Contact>ICollection<Partnership>collections.

稍后,在实体实用程序代码中,我需要清除集合.到目前为止我找到的唯一解决方案是:

collection.GetType().GetInterface("ICollection`1").InvokeMember("Clear",
        BindingFlags.Public | BindingFlags.Instance | BindingFlags.InvokeMethod,
        null,
        collection,
        new object[0]);
Run Code Online (Sandbox Code Playgroud)

我可以使用更优雅的东西吗?

.net c# generics

3
推荐指数
1
解决办法
2748
查看次数

域名事件被提出时谁负责实体的变异?DDD

我一直在学习CQRS/ES.看一下小例子项目,我经常看到事件改变了实体状态.例如,如果我们查看Order 聚合根:

public class Order : AggregateRoot {
    private void Apply(OrderLineAddedEvent @event) {
        var existingLine = this.OrderLines.FirstOrDefault(
            i => i.ProductId == @event.ProductId);

        if(existingLine != null) {
            existingLine.AddToQuantity(@event.Quantity);
            return;
        }

        this.OrderLines.Add(new OrderLine(@event.ProductId, @event.ProductTitle, @event.PricePerUnit, @event.Quantity));
    }

    public ICollection<OrderLine> OrderLines { get; private set; }

    public void AddOrderLine(/*parameters*/) {
        this.Apply(new OrderLineAddedEvent(/*parameters*/));
    }

    public Order() {
        this.OrderLines = new List<OrderLine>();
    }

    public Order(IEnumerable<IEvent> history) {
        foreach(IEvent @event in history) {
            this.ApplyChange(@event, false);
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# domain-driven-design servicebus cqrs domain-events

3
推荐指数
1
解决办法
1134
查看次数

透明度问题从Monogame中的PNG加载纹理

我试图在Windows上的MonoGame GL中完成我认为非常简单的事情.那就是从PNG文件加载纹理并将其作为精灵渲染到屏幕上.到目前为止,我遇到了很多麻烦.我正在使用以下代码(F#)将PNG加载到Texture2D:

    use file = System.IO.File.OpenRead("testTexture.png")
    this.texture <- Texture2D.FromStream(this.GraphicsDevice, file)
Run Code Online (Sandbox Code Playgroud)

然后渲染:

    this.spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.NonPremultiplied);
    this.spriteBatch.Draw(this.texture, Vector2.Zero, Color.White)
    this.spriteBatch.End()
Run Code Online (Sandbox Code Playgroud)

这个问题是对alpha通道有一些奇怪的影响,好像有些东西没有通过alpha预乘或某些东西,但我无法准确确定发生了什么.值得注意的是,完全相同的代码使用官方XNA库完美呈现.这个问题只出现在MonoGame中,我使用3.0和3.2版进行了测试,两者都有相同的问题.

这是在MonoGame中渲染测试PNG来说明问题:

http://i.imgur.com/Dny26gI.png

每个图像中的背景是矢车菊蓝色,然后分别是纯红色,绿色和蓝色.请注意,在带有红色背景的图像中,您可以看到纹理中红色线条周围的黑色轮廓.由于线条和背景都是纯红色,因此不应该出现此轮廓.请注意,具有蓝色背景的图像中的蓝线周围会出现相同的情况,但绿色背景的图像中则不会出现相同的情况.在该图像中,绿线与绿色背景融为一体.

下面是使用官方XNA库完全相同的文件呈现方式.

http://i.imgur.com/2Rtqhuk.png

注意当背景颜色相同时,蓝色,绿色和红色线如何融入背景.这是正确的行为.

鉴于相同的代码在XNA和MonoGame中表现不同,我相信框架中必定存在错误.任何人都可以对这个错误的位置和性质有什么好的猜测吗?如果这是一个简单的解决方案,那么最好的解决方案可能就是自己解决这个问题.

除此之外,我真的只是想学习一种方法,我可以简单地加载PNG并将其正确地渲染到MonoGame的屏幕上.我敢肯定,我不能成为第一个想要这样做的人.我想尽可能避免使用内容管道,只是为了简单起见.

更新

我已经做了一些挖掘,试图弄清楚这个问题的本质.我已经更改了testTexture.png文件,以便更多地揭示alpha混合问题.使用这个新的纹理文件后,我拍摄了不正确的MonoGame渲染的截图,并在其单独的颜色通道中查看.发生的事情让我非常困惑.我最初虽然可能是一个BlendState.NonPremultiplied被忽略的简单案例,但我所看到的看起来更复杂.除此之外,绿色通道似乎与蓝色和红色通道的混合方式不同.这是一个相当大的PNG图像,它是关于我正在谈论的截图和解释的汇编:

i.imgur.com/CEUQqm0.png

显然,MonoGame for Windows GL中存在某种错误,可能还有其他版本我没试过这个版本(虽然我有兴趣看看已经验证过).如果有人认为他们知道这里可能会发生什么,请告诉我.

最后,这是重现我遇到的问题的项目文件:

mega.co.nz/#!llFxBbrb!OrpPIn4Tu2UaHHuoSPL03nqOtAJFK59cfxI5TDzLyYI

graphics rendering sprite monogame

2
推荐指数
1
解决办法
2658
查看次数

我的SharpDX应用程序中的内存泄漏

此代码每100毫秒运行一次.内存使用率不断增加,直到达到1.5 GB然后崩溃.

void takeScreenShot()
{
    Surface s;
    s = CaptureScreen(); 
    pictureBox1.Image = new Bitmap(Surface.ToStream(s, ImageFileFormat.Bmp));
    s.Dispose();
}

public Surface CaptureScreen()
{
    int width = Screen.PrimaryScreen.Bounds.Width;
    int height = Screen.PrimaryScreen.Bounds.Height;
    Device device = new Device(new Direct3D(), 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing, new PresentParameters(width, height));
    DisplayMode disp = device.GetDisplayMode(0);
    Surface s = Surface.CreateOffscreenPlain(device, disp.Width, disp.Height, Format.A8R8G8B8, Pool.Scratch);
    device.GetFrontBufferData(0, s);
    return s;
} 
Run Code Online (Sandbox Code Playgroud)

c# memory directx sharpdx

2
推荐指数
1
解决办法
1413
查看次数

有没有一种方法可以执行以临时文件名存储的exe?

我正在将存储为嵌入式资源的本机exe写入Path.GetTempFileName返回的文件中。该功能是理想的,因为它让我忽略了避免竞争情况的实现细节。唯一的缺点是它将返回带有扩展名的文件名.tmp

Process.Start在我的系统上的记事本中打开tmp-named-exe文件。显然,您可以使用p / invoke手动指定类和动词(请参阅/sf/answers/887685361/)。在我这样做之前,是否有任何方法可以使用.NET框架来完成同一件事?

c#

2
推荐指数
1
解决办法
830
查看次数

异步方法.Result vs Sync方法

这两种方法的工作方式是否相同?这两个都阻塞了主线程,不是吗?

// 1. Use async method
public IEnumerable<Entity> AsyncMethod()
{
    return Context.Entities.ToListAsync().Result;
}

// 2. Use sync method
public IEnumerable<Entity> SyncMethod()
{
    return Context.Entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await

2
推荐指数
1
解决办法
549
查看次数

纹理图集偏移/重复适用于网格,但忽略点系统粒子

我正在使用纹理图集来保存一系列图像.当映射到网格时MeshLambertMaterial,使用Texture.offsetTexture.repeat精美地工作以从整个图像中剪切出子纹理.

但是,使用完全相同的纹理实例可以PointCloudMaterial使用整个图集渲染粒子,而不仅仅是选定的子图像.

我试图遵循three.js源代码,但文档很少.

有没有比使用画布切割图像更好的解决方法?

编辑:根据要求,可在http://jnm2.com/minesweeper/上获取正在进行的工作.

textures webgl three.js

1
推荐指数
1
解决办法
1586
查看次数