标签: rendering

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

WPF使用BitmapSource渲染性能

我已经创建了一个WPF控件(继承自FrameworkElement),它显示了可以平移的平铺图形.每块瓷砖在24bpp时为256x256像素.我已经超越了OnRender.在那里,我加载任何新的tile(如BitmapFrame),然后使用drawingContext.DrawImage绘制所有可见的tile.

现在,每当渲染周期中有少量新的图块时,帧速率从60fps下降到零大约一秒钟.这不是由加载图像(以毫秒为单位)引起的,也不是由DrawImage(它根本不花时间,因为它只填充一些中间渲染数据结构)引起的.

我的猜测是每当渲染线程获得大量(~20)新的BitmapSource实例(即它尚未缓存的实例)时,它就会扼流圈.要么花费大量时间将它们转换为某种内部DirectX兼容格式,要么它可能是一个缓存问题.它不能用完视频RAM; 穿孔器显示低于60MB的峰值,我有256MB.此外,Perforator说所有渲染目标都是硬件加速的,所以也不可能.

任何见解将不胜感激!

提前致谢

丹尼尔

@RandomEngy:
BitmapScalingMode.LowQuality减少了一点问题,但没有摆脱它.我已经按照预期的分辨率加载了瓷砖.它不能是图形驱动程序,它是最新的(Nvidia).
得知缩放需要花费很多时间,我有点惊讶.我理解它的方式,位图(无论其大小)只是作为Direct3D纹理加载,然后硬件缩放.事实上,一旦第一次渲染位图,我可以改变其旋转和缩放而不会进一步冻结.

wpf performance rendering bitmap

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

将C#对象渲染为Html

我们有一堆域实体应该呈现为html格式,在弹出窗口中显示它们的详细信息.

我很乐意做这样的事情:

Product product = new Product(...);
product.ToHtml();  // or: HtmlRenderer.Render(Product);
Run Code Online (Sandbox Code Playgroud)

但我的主要问题是如何从后面做这些事情.我有3个不同的答案:

1.按代码渲染:

我可以简单地编写我的代码来在ToHtml方法(C#)中呈现Html - 问题是它太静态了.如果你想将标题移动到中间,你应该改变代码.而且,在C#中读取Html缩进非常困难.

2.使用XSL:

XSL文件可以轻松管理Html模板并使用XSLT我可以将XML文件转换到文档的正确位置.解析器已经由其他人编写(只需要学习语法)**为此我们需要每个对象都可以序列化为Xml.如果对象发生了变化 - > Xml将被更改 - > xslt也需要更改**这也会让我选择简单地缩进html例如:添加css功能和\或更改html设计

3.使用其他模板引擎:

编写我自己的C# - > Html模板引擎,这样它将从文件(*.template)中读取模板,并使用反射将正确的属性插入模板的正确位置.**在这个解决方案中,我们可以考虑许多问题,例如:语法应该如何?这件事好吗? %Name %% Description%以及我们如何处理数组?**也许我们可以使用现有的发动机(Brail或T4-Templating)?

你喜欢哪个?你知道一个好引擎吗?现在我更喜欢第二种解决方案,但它会非常慢.

谢谢

html c# rendering template-engine

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

C#快速像素渲染

我正在使用OpenNI开发深度处理(Xbox Kinect,Asus Xtion等)应用程序.

当传感器提供新的深度数据时,我需要一种非常简单快速的Windows窗体绘图方式(30或60 fps,具体取决于分辨率).

目前,当数据可用时,我从单独的线程中使双缓冲面板无效,然后在面板的paint方法中设置位图的像素,产生可预测的可怕5fps.

System.Drawing.Graphics似乎缺乏设置单个像素的快速方法,除非任何人都可以指示其他方式.

我确实只需要设置像素颜色,因此如果可能的话,我们希望避免使用第三方高速渲染API,并且理想情况下使用尽可能本地的东西.

有没有人有什么建议?

c# graphics drawing rendering kinect

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

Angular JS:检测页面内容何时完全呈现并且可见

我的情况

我有一个很大的人员列表,都有自己的个人资料图片和信息.所有项目都有一些CSS3样式/动画.

我正在使用:

<li ng-repeat="person in people">
Run Code Online (Sandbox Code Playgroud)

人们是一个包含来自外部JSON文件的超过150个对象的数组,这些对象都必须显示在同一页面上.

页面加载/渲染速度很慢,而不是因为$ http GET函数可以获取人员的JSON数据(只需要大约100毫秒),但是页面的渲染和所有css3样式的渲染都应用于每个item(如果我把我的CSS关闭它会变得更快).

我的主要问题

我可以慢慢使用页面渲染,但我真正想要的是检测每当我的重页加载其内容以启动和停止加载指示器时.我试过像这样做一个指令:

directive("peopleList", function () {
    return function (scope, element, attrs) {
        scope.$watch("people", function (value) {
            var val = value || null;
            console.log("Loading started");
            if (val){
                console.log("Loading finished");
            }
        });
    };
});
Run Code Online (Sandbox Code Playgroud)

并将此指令放在正在加载我的人员列表的包装器div上.但是,每当我的JSON数据对象被填充时,加载似乎就会停止,这只需要大约100毫秒,但页面的实际视觉渲染需要更多像4-5秒.

我也尝试过像http://jsfiddle.net/zdam/dBR2r/这样的解决方案,但我得到的结果相同.

我需要的

当我浏览我的页面(它们都有相同类型的列表)时,我需要一些东西告诉我,只要页面已经完全加载并且对用户可见,这样我就知道何时隐藏我的加载指示器.

rendering css3 angularjs

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

某些设备上的自定义ViewPager呈现问题

我开发了一种滚动机制来选择应用程序中的人员.它是自定义视图寻呼机,允许每次在屏幕上显示多个项目(在我的情况下为3),并且两侧都有阴影.

以下是它在Nexus 5,Nexus 4,Galaxy S3等设备上的外观和工作原理:

在此输入图像描述

但是在某些设备上(索尼Xperia和不同类型的摩托罗拉)渲染看起来很糟糕,结果如下:

在此输入图像描述

关于代码,我参考了@Commonsware的这篇博文:

http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

第三个选项,你可以在这里找到代码.

这是我的相关代码:

PagerContainer:

    public class PagerContainer extends FrameLayout implements ViewPager.OnPageChangeListener {

    private ViewPager mPager;
    boolean mNeedsRedraw = false;

    public PagerContainer(Context context) {
        super(context);
        init();
    }

    public PagerContainer(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public PagerContainer(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        //Disable clipping of children …
Run Code Online (Sandbox Code Playgroud)

android rendering view android-viewpager

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

opengl - 如何实现"门户渲染"

过去一周,我一直在努力实现类似游戏Antichamber(更准确地说是下面显示的这个技巧):

特技

这是我希望实现的视频(尽管它是使用虚幻引擎4完成的;我没有使用它):https://www.youtube.com/watch?v = Off3JcoWrMZs

我查找了最好的方法,我发现了模板缓冲区.在这篇文章和这个代码("drawPortals()"函数)之间,我在网上找到了我几乎实现它.

它可以很好地与一个门户到另一个房间(不是一个可交叉的门户,这意味着你无法穿过它并被传送到另一个房间).在我的例子中,我正在绘制一个门户到一个简单的方形房间,里面有一个球体; 在门户网站后面还有另一个球体,我用来检查深度缓冲区是否正常工作并将其绘制在门户网站后面:

面前

侧

当我添加另一个接近此门户的门户时,会出现问题.在这种情况下,我设法正确显示另一个门户(灯光关闭,但右侧的球体颜色不同,表明它是另一个球体):

在此输入图像描述

但是如果我转动相机以便第一个门户必须被绘制在第二个门户上,那么第一个门户的深度就会出错,而第二个门户将被绘制在第一个门户上,如下所示:

在此输入图像描述

虽然应该是这样的:

在此输入图像描述

所以,这就是问题所在.我可能在深度缓冲区做错了,但我找不到什么.

我的渲染部分的代码就是这样的:

glClear(GL_DEPTH_BUFFER_BIT);
glEnable(GL_STENCIL_TEST);

// First portal
glPushMatrix();

// Disable writing to the color and depht buffer; disable depth testing
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDepthMask(GL_FALSE);
glDisable(GL_DEPTH_TEST);

// Make sure that the stencil always fails
glStencilFunc(GL_NEVER, 1, 0xFF);

// On fail, put 1 on the buffer
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);

// Enable writing to the stencil buffer
glStencilMask(0xFF);

// Clean the …
Run Code Online (Sandbox Code Playgroud)

opengl rendering stencil-buffer

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

Vulkan - 直接绘制纹理而不使用顶点和着色器

是否可以直接在帧缓冲区中绘制纹理(如果它具有正确的宽度,高度和像素格式)而不使用Vulkan中的顶点和着色器?

graphics textures rendering framebuffer vulkan

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

为什么Vue.js使用VDOM?

根据Vue.js的文档,它正在使用引擎盖下的VDOM来呈现UI.根据我的理解,VDOM主要是为了避免"跟踪依赖"而发明的.使用VDOM,可以在不知道确切更改的情况下协调应用程序的更大部分.因此,可以使用普通对象和数组来描述视图,只需要通知框架有关更改(如setState在React中).然后,比较两个VDOM树,并将最小的所需更改集应用于真实DOM.

另一方面,Vue.js使用跟踪的依赖关系.它确切地知道发生了什么变化,因此可以使用DOM绑定.此外,由于大多数Vue.js用户已经在使用模板语言,因此VDOM提供的更大灵活性并没有真正受益.那么为什么Evan决定使用VDOM?

javascript frontend rendering vue.js

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

主线程上昂贵的renderInContext内存使用情况

我正在使用在主线程上执行的跟随代码来截取屏幕截图(不是self.view的子视图)视图然后显示在UIImageView.一切都在功能方面运行良好,但是因为这个代码是在扩展上运行的,所以存在更严格的内存界限(我读过~30 MB是上限?),

UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.screenshotView.frame.size.width, self.screenshotView.frame.size.height-2), YES, 0.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
[self.screenshotView.layer renderInContext:context];
_generatedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

self.previewImageView.image = _generatedImage;
Run Code Online (Sandbox Code Playgroud)

performSelectorOnMainThread无论何时UIButton按下,都会调用此代码所在的方法.A UIAlertController也用于处理UI的冻结,但是如果连续按下按钮(在解除之后UIAlertController),前几次内存使用将保持在基线附近(~15 MB),但随后加速到~30 MB并保持在那里,直到几秒钟后再次调用该方法,然后当它完成渲染时,它会回落到~15 MB.

我不确定是什么导致了这种行为,为什么内存使用不会一直保持在~15 MB左右,而且我不确定当连续调用该方法时它会出现什么样的情况.听起来更像是有时会发生一件事吗?我怎样才能确保不会发生这种情况,只会在UIAlertController不使内存使用量增加的情况下解除再次渲染的安全​​性.

memory rendering objective-c ios uigraphicscontext

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