我意识到我想做的事情并不安全.但我只是在做一些测试和图像处理,所以我的重点是速度.
现在,这段代码为我提供了32位像素值类型的相应字节.
struct Pixel {
unsigned char b,g,r,a;
};
Run Code Online (Sandbox Code Playgroud)
我想检查一下像素是否低于某个值(例如r, g, b <= 0x10).我想我只想条件测试像素的位和位0x00E0E0E0(我可能有错误的字节顺序)来获得暗像素.
我没有使用这个丑陋的混乱(*((uint32_t*)&pixel))来获取32位无符号整数值,而是认为应该有一种方法让我设置它以便我可以使用pixel.i,同时保持使用引用绿色字节的能力pixel.g.
我可以这样做吗?这不起作用:
struct Pixel {
unsigned char b,g,r,a;
};
union Pixel_u {
Pixel p;
uint32_t bits;
};
Run Code Online (Sandbox Code Playgroud)
我需要编辑我现有的代码来说明pixel.p.g绿色字节.如果我这样做会发生同样的情况
union Pixel {
unsigned char c[4];
uint32_t bits;
};
Run Code Online (Sandbox Code Playgroud)
这也可以工作,但我仍然需要更改所有索引到的内容c,这有点难看,但如果我真的需要,我可以使用宏.
我需要一些简单的例子来开始使用clang.我下载了llvm和clang并构建了:
mkdir llvm-build
cd llvm-build
../llvm/configure
make
Run Code Online (Sandbox Code Playgroud)
我试图从clang示例构建PrintFunctionNames但收到错误消息:
../../../../Makefile.common:61:../../../../Makefile.config:没有这样的文件或目录../../../ .. /Makefile.common:69:/Makefile.rules:没有这样的文件或目录make:*没有规则来制作目标`/Makefile.rules'.停止.
自述文件说只需要make.那么如何构建这个插件呢?
我一直在使用Windows API的BitBlt功能来执行屏幕抓取.
但是有许多缺点:
BitBlt) - 要解决这个问题需要禁用Aero,我只是不愿意这样做.屏幕闪烁,事物转移.CAPTUREBLT标记,无法捕获分层Windows .启用后,捕获时鼠标光标会闪烁.这似乎是一个小问题,但当应用程序无其他错误时,它非常烦人.作为解决方法,我打算将分层窗口渲染为附加光标.我已经在使用OpenGL来显示和操作捕获的屏幕数据.BitBlt给我像素数据,将其加载到纹理中相对容易.然而,这有点荒谬,因为我手动将数据重新发送回GPU,因为它应该可以在GPU上开始使用.数据肯定存在,但尝试访问它是另一回事.
我认为供应商的待办事项清单(或可能在任何清单上)的功能并不高,但我想问一下知道AMD(ATI)提供的任何条款或NVidia在其驱动程序中用于读取屏幕缓冲区(例如,进入OpenGL上下文).我对现代GPU架构知之甚少,不知道从哪里开始挖掘答案.
首先,我的代码设置了SDL环境,然后继续更新OpenGL上下文,而不执行任何SDL_Event处理.这会导致窗口在打开时对Windows显示无响应.窗口闪烁了一下.标题栏将附加"(无响应)",并且在窗口内单击时,它将变为灰色,因为Windows在非响应窗口上默认执行此操作.然而,在这种状态下(即使在它变灰之后),OpenGL显示继续更新和动画,这里是踢球者,它甚至在拖动窗口时这样做.显然,在这种情况下,应用程序不会正确处理来自窗口的事件,导致窗口认为它处于挂起状态.但有明显的证据表明,opengl仍在继续呈现.
现在我对代码进行一次修改,这三行放在循环内的适当位置(也可以进行OpenGL绘制):
SDL_Event event;
if (SDL_PollEvent(&event) && event.type == SDL_QUIT)
break;
Run Code Online (Sandbox Code Playgroud)
所有这一切都是使用SDL刷新消息队列.
现在的行为是Windows不再认为它是"无响应"并且它不会变灰.没有闪烁.一切似乎都在游泳.但是,一旦我单击并拖动标题栏拖动窗口,渲染就会被阻止.我没有调试它以确定,但我怀疑SDL_PollEvent阻止窗口拖动的持续时间.
有没有解决的办法?这很有趣,因为未能处理事件所表现出的部分行为证明我理想的是可能的.
更新:我找到了这个主题:http://www.gamedev.net/topic/488074-win32-message-pump-and-opengl---rendering-pauses-while-draggingresizing/
判决结果似乎归结为微软为我们做出的某些选择......它基本上陷入困境DefWindowProc()直到鼠标被释放.破解修复程序会变得非常混乱,我可能可以通过在另一个线程中渲染来解决问题.但我甚至不想开始考虑从多个线程中处理OpenGL上下文,如果这甚至是可能的话.
我最初的猜测是答案是否定的,因为这里提供了证据:
https://github.com/inuyaksa/jquery.nicescroll/wiki/Native-scroll-vs-Hardware-accelerated-one
我可以定性地注意到"硬件加速"版本在我的计算机上滚动得更顺畅.我运行一个120Hz的显示器.这表明第二种方法更快,更有效.
对于HTML元素,例如
<div id="a" style="overflow-y: hidden; height: 100px">
Content <em>which exceeds 100px in height</em>
<img src='lolcat.png' alt='lolcat'/>
</div>
Run Code Online (Sandbox Code Playgroud)
我想直接实现3D硬件加速布局的方法是渲染div的全高,然后将此输出作为全高度的纹理加载,然后用于渲染实际div的纹理坐标将显示一次只有100px.
我的问题与scrollTop理论如何在理论上做到这一点有关,但似乎目前通过使用TWO元素获得我描述的行为的可能性要大得多:
<div id="a" style="overflow-y: hidden; height: 100px; position: relative">
<div style="position: relative">
Content <em>which exceeds 100px in height</em>
<img src='lolcat.png' alt='lolcat'/>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
而不是设置我的scrollTop属性,document.getElementById('a')而是将CCS3 -webkit/moz/ms/o-transform属性设置为具有相应的负Y轴像素值的3D值.
使用CSS3滚动的最有效方法是什么?特别是,如何构建我的DOM以最有可能获得最直接的滚动实现(滚动元素时不会重新绘制内部内容)?
更新:我一直在为Chrome使用一个非常漂亮的平滑滚动插件,它似乎使用JS在页面上分配scrollTop偏移来实现滚动渲染,这似乎表明如果这不是硬件加速,性能就不能t真正跟上屏幕刷新率(120Hz),没有大量的CPU使用率.尽管如此,这种猜测仍然极不科学.我在这一点上得出的结论是,浏览器可以自由地加速他们在合理范围内选择的任何内容,因此答案可能是响亮的.
在这个网站上得到了很好的回答,Bram Cohen的耐心差异在集市中被发现作为默认差异,并且作为git diff的一个选项,但我发现很难找到实现这种特殊diff算法的独立独立程序.
例如,我想将耐心差异应用于强制差异,并且使用规范的"frobnitz"代码示例非常清楚耐心差异是如何更好的:

右侧的终端已调用git diff带有--patience标志的.
我还设置了diff-highlightperl脚本,它的作用是在这些行的第一个和最后一个不同部分之间的匹配行上反转颜色.左侧有一个例子,其中这并不完全帮助了这么多,但我会让它滑,因为至少有是分号处有...无论如何,致力于改进DIFF高亮脚本是不是这个问题的主题.
除了在哪里找到独立耐心差异的问题,如果有人知道如何使perforce p4使用外部差异程序,那也是必须要做的事情.
这通常会影响C++ 11代码的代码可移植性.我正在谈论有一个类似于C/C++预处理器阶段的新代码生成阶段,其中我们可以使生成的C++代码对更大的编译器系列更"友好".我想也许这可能会影响将人们转移到C++ 11编码的可行性.
游戏控制台是一种平台类型的示例,您可能会遇到限制编译器,可能不支持不错的C++ 11功能.另一个例子可能是英特尔的C++编译器.我很高兴看到英特尔一直在努力解决这个问题,看起来这在最新版本上是没有问题的,但是假设出于某种原因需要使用旧版本的编译器!
另一个半具体的例子是,我最近的一个项目是为开发中的前线使用构建差异工具; 我对传统的基于行的差异感到不满,所以我构建了一个在C++ 中使用diff_match_patch实现的小命令行工具.C++ 11已经"渗透"到胶水代码中,因为auto它太酷了,但结果是我基本上不得不在Linux上构建LLVM,Clang和libc ++以便开始在linux上使用我的工具.目前还不清楚如何以源代码的形式将C++ 11项目分发到Linux,因为在Linux上设置这个项目有点痛苦.这并不是说它无法完成,而是它过于尖锐,而且必须花费几个小时才能在那里设置工具链.(更新: 好吧,几个月/几年后,同样的小工具现在可以通过centos 7的软件包提供完美的GCC,所以这是一种解脱.)
所以,如果我有一种神奇的方法来自动重构C++ 11工具来生成老式的C++代码,旧的编译器可以开箱即用,这可能会让一些人的生活变得更容易.
在使用clang进行代码重构自动化方面取得了一些惊人的进展,这在David的答案中得到了很好的体现,因此它让我想到也许有可能根据这项技术建立一个特定的自包含工具.可以有效地将C++ 11代码模式转换为相应的非C++ 11等价物.这里的想法是,不是将其用于通用自动重构(例如,将字符串转换为C字符串并返回字符串的隔离和重构代码),我们可以使用它来隔离不受支持的C++的使用11个功能并将它们重构为一些代码,这些代码执行相同的操作但实际上会成功编译.
这是可能的吗?我不太熟悉C++ 11的功能以及对降低实现相同功能的"旧"C++的后果.看起来好像这种事情是可能的,我不能这样做,因为我没有(我没想到我会有)足够掌握语言知道如何实现这一点.
我想一个更合适的问题是,这值得努力吗?很难看出(鉴于LLVM显然非常有能力对ARM进行交叉编译)可能会阻止使用clang来使用更直接的方法完成工作,例如交叉编译到目标平台.我的猜测是,这只是我的偏执狂说法,我将来不必担心让我的C++ 11代码在所有可想到的目标平台上顺利运行,因为它们都应该是x86,x86-64或者无论如何ARM.但谁知道我的工作将在几年内完成.
这是我使用的较少:
less 458 (POSIX regular expressions)
Copyright (C) 1984-2012 Mark Nudelman
Run Code Online (Sandbox Code Playgroud)
在Vim,它是\<和\>,在大多数其他正则表达式是\b.
在移动版Safari(iOS 8.0 iPad Mini)中,似乎有越多的输入(我尝试过不同类型)网络,"打字"得到的速度越慢(我甚至设法冻结野生动物只是打字).为了确保它不是键盘,我用Swiftkey测试,但出现了同样的问题.使用Swiftkey,输入速度很快,但文本被慢慢插入输入类型文本中.
我创建了一个带有一些输入的jsFiddle,它真的很慢(如同地狱).在这个小提琴,我添加了一些选项与许多"选项"标签,因为我发现这使情况更糟.我也尝试添加自动完成属性(设置为false)但它似乎没有任何影响.
这或多或少是"有问题的"代码的样子:
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="text" autocorrect="off" />
<input class="" type="email" autocorrect="off" />
<select><!-- lots of "option" tags --></select>
Run Code Online (Sandbox Code Playgroud)
而现在奇怪的是:这不会发生在iPhone 5S上(没有在任何其他iPad上测试).
有人知道为什么会这样吗?或者,如果它发生在任何其他设备上?
提前致谢.
所以我正在尝试创建一个由jQuery调用的C#WCF REST服务.我发现jQuery要求AJAX调用是在相同的源策略下进行的.关于如何进行,我有几个问题.
我已经知道了;
1. JSONP与服务器回调的hacky解决方案
2.拥有跨域代理的服务器开销太多.
3.在浏览器中使用Flash进行调用并在我的WCF服务器根目录下设置crossdomain.xml.
我宁愿不使用这些因为;
1.我不想使用JSON,或者至少我不想限制使用它
2.我想将提供静态页面的服务器与提供应用程序状态的服务器分开.
3.这个时代的闪光是不可能的.
我在想:有没有类似Flash的crossdomain.xml文件适用于jQuery?这个"同源"策略是jQuery的一部分还是特定浏览器中的限制?如果它只是jQuery的一部分,也许我会尝试挖掘代码来解决它.
编辑:
Shreddd得到了相当多的信息,见下文.要在C#中执行此操作,我创建了以下方法,您需要调用所有服务方法:
private void BypassCrossDomain()
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
}
Run Code Online (Sandbox Code Playgroud)
重要的是要注意,这允许跨站点脚本攻击,当您需要使用您的请求发送第三方cookie时,您也不能使用"*".
c++ ×2
javascript ×2
opengl ×2
ajax ×1
build ×1
c ×1
c++11 ×1
clang ×1
compilation ×1
cross-domain ×1
css3 ×1
diff ×1
fullscreen ×1
git ×1
gpu ×1
html ×1
html5 ×1
ios8 ×1
ipad ×1
ipad-mini ×1
jquery ×1
perforce ×1
performance ×1
portability ×1
rest ×1
screenshot ×1
sdl ×1
unions ×1
unix ×1
winapi ×1
windows ×1