我们正在维护一个使用DirectDraw的全屏256色图形模式的旧视频游戏.问题是,在后台运行的某些应用程序有时会在游戏运行时尝试更改系统调色板,这会导致图形损坏.
我们可以(有时)通过处理WM_PALETTECHANGED消息来检测何时发生这种情况.在几个更新版本之前,我们添加了日志记录(只记录窗口标题/类/进程名称),这有助于用户识别有问题的应用程序并关闭它们.MSN Live Messenger是一个常见的罪魁祸首.
当我们发现Windows Vista(和7)"单独"完成它时,问题变得更糟.WM_PALETTECHANGED参数指向CSRSS和桌面窗口.在Vista中,经常使用的解决方法是打开任何文件夹(计算机,文档等)并在运行游戏时保持打开状态.听起来很荒谬,但在大多数情况下都有效.在Windows 7中,甚至这种解决方法都不再适用.用户发现停止某些服务(Windows Update和索引服务)也解决了某些配置上的问题.
前段时间我刚开始尝试随机的东西,希望能找到解决方案.我发现在设置DirectDraw调色板(使用IDirectDrawPalette :: SetEntries)之前设置GDI调色板(使用Create/SelectPalette)会在调色板损坏后恢复调色板(WM_PALETTECHANGED处理程序).SetSystemPaletteUse并在主表面上调用SetPalette帮助了更多.然而,当应用程序试图窃取调色板时,仍然可以感觉到闪烁,这在渐变期间尤其突出.
问题:有没有办法获得一个"真正的"独家调色板,只要我们的游戏保持关注,完全不允许其他应用程序更改Windows调色板?
我们使用org.apache.commons.dbcp.BasicDataSource作为Spring中数据源的父类.
是否可以在"url"或DBCP数据源中的另一个属性中指定要使用的模式?
出于某种原因,表单上的透明控件在某些计算机上变得不透明.我在"Acer Netbook"和"Thinkpad x600"上得到了报道.该应用程序是使用Delphi 2007构建的.
这就是它的样子: 链接
虽然看起来像这样: 链接
表单上的不透明控件是TLabels和TStaticTexts.
(我使用TStaticText控件来定义可点击区域,因为鼠标消息到无处理控件(如标签)会转到WM_NCHITTEST处理程序.底部的"按钮"是黑色的,因为我不小心将其颜色设置为clNone,尽管它不应该完全可见.)
为什么会发生这种情况以及如何防止这种情况(除了将文本渲染到背景图像之外的变通方法)?
编辑:我设法在我的笔记本电脑上重现问题,该笔记本电脑运行的是32位色的Windows XP,并使用经过认证的ATI驱动程序.
假设我StringBuilder用编译语言编写自己的语言(例如C++).
衡量各种实施性能的最佳方法是什么?简单地计时几十万次运行会产生高度不一致的结果:从一批到另一批的时间差异可能高达15%,因此无法准确评估潜在的性能改进,从而使性能提升小于此.
我做了以下事情:
这有点稳定了结果.还有其他想法吗?
我当前正在显示附加到消息App Im building中发送的每条消息的时间戳.但是,我在转换时间戳时发现的每个堆栈溢出问题都与角度或本机有关,我试图在做出反应时这样做.想知道我会用什么代码来显示(例如:2/8/2018 11:04 am ||或类似的东西).
使用的消息数组的当前.push是:
this.messagesRef.push(
{
content: this.state.userMsg,
roomId: this.props.activeRoom.key,
username: (this.props.user ? this.props.user.displayName : 'guest'),
sentAt: this.props.firebase.database.ServerValue.TIMESTAMP
}
);
Run Code Online (Sandbox Code Playgroud)
我的git hub推动这是(Git Link)
大多数材料都是DMD1和Derelict2.我已经尝试了所有我能想到的东西,而我得到的只是不同种类的垃圾.DMD2安装正常,因为我可以编译hello worlds.我的sc.ini写道:
[Version]
version=7.51 Build 020
[Environment]
LIB="%@P%\..\lib";\dm\lib
DFLAGS="-I%@P%\..\..\src\phobos" "-I%@P%\..\..\src\druntime\import" "-I%@P%\..\..\src\etc"
LINKCMD=%@P%\link.exe
Run Code Online (Sandbox Code Playgroud)
如果没有包含gl3.d的路径(我正在使用Eclipse并且还使用命令shell,Windows XP中的dmd/bud检查)我得到"无法读取gl3.d"错误,这是在路径时修复的被添加到库引用中.
我试图编译的文件是:
import std.stdio;
import derelict.opengl3.gl3;
pragma(lib, "DerelictGL3.lib");
void main(){
DerelictGL3.load();
writeln("Fred");
}
Run Code Online (Sandbox Code Playgroud)
如果我注释掉pragma,那么错误是:
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
bin\Main.obj(Main)
Error 42: Symbol Undefined _D8derelict7opengl33gl312__ModuleInfoZ
bin\Main.obj(Main)
Error 42: Symbol Undefined _D8derelict7opengl33gl311DerelictGL3C8derelict7opengl33gl317DerelictGL3Loader
--- errorlevel 2
Run Code Online (Sandbox Code Playgroud)
如果我取消注释该编译指示,则错误为:
-------- Build Commands: --------
-od"bin"
-of"bin\Main.exe"
-I"src"
"src\Main.d"
OPTLINK (R) for Win32 Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved. …Run Code Online (Sandbox Code Playgroud) 游戏使用软件渲染在内存中绘制全屏调色板(8位)图像.
使用OpenGL将图像放在屏幕上的最快方法是什么?
我试过的事情:
glDrawPixels与glPixelMap指定的调色板,并让OpenGL的做调色板映射.表演很糟糕(约5 FPS).glDrawPixels.性能更好,但CPU使用率仍远高于使用DirectDraw相同软件调色板映射的32位.我应该使用某种纹理吗?
有没有一种比秒表更准确的“睡眠”方法?或者,有没有一种方法可以使秒表类更准确?它不必使用.NET,也可以使用c ++,但是无论使用哪种语言,都必须具有1ms的准确度。我不需要那么多。假设我要让程序“睡眠” 300ms,那么我希望它至少在大多数时间都睡眠300ms。
目前,我使用:
Dim StopWatch As New StopWatch
StopWatch.Start
Do
Loop Until StopWatch.ELapsed.Milliseconds >= 300
StopWatch.Stop
Run Code Online (Sandbox Code Playgroud)
我运行5次的结果是:306、305、315、327、304。
如果我再运行它,它会保持这种状态。
我将线程和进程的优先级放在“实时” /“高”上。
在分析我的代码以找到变慢的时候,我有3个功能显然需要永远,这就是非常困倦的说法.
这些功能是:
ZwDelayExecution 20.460813 20.460813 19.987685 19.987685
MsgWaitForMultipleObjects 20.460813 20.460813 19.987685 19.987685
WaitForSingleObject 20.361805 20.361805 19.890967 19.890967
Run Code Online (Sandbox Code Playgroud)
谁能告诉我这些功能是什么?为什么他们花了这么长时间,以及如何解决它们.
谢谢
目前正在尝试学习D编程语言.
写了这个小快速算法算法,它在运行示例时返回OutOfMemoryError.
import std.stdio;
import std.algorithm;
int[] qs(int[] ary)
{
if(ary.length <= 1)
{
return ary;
}
int pivot_pos = 0;
int pivot = ary[pivot_pos];
for(int i = 0; i < ary.length; i++)
{
if(ary[i] < pivot)
{
ary = ary.remove(i) ~ ary;
pivot_pos++;
}
else
{
ary ~= ary.remove(i);
if(i < pivot_pos)
pivot_pos--;
}
}
return qs(ary[0..pivot_pos]) ~ qs(ary[(pivot_pos+1)..ary.length]);
}
int main()
{
int[] ary = [ 2, 1, 4, 1, 6, 78, 3, 5, 10, 129, 234, 3, …Run Code Online (Sandbox Code Playgroud) d ×2
2d ×1
algorithm ×1
benchmarking ×1
c++ ×1
cpu ×1
delphi ×1
directdraw ×1
gdi ×1
javascript ×1
jdbc ×1
opengl ×1
palette ×1
performance ×1
profiling ×1
quicksort ×1
reactjs ×1
spring ×1
sql-server ×1
stopwatch ×1
timer ×1
timestamp ×1
vb.net ×1
vcl ×1
verysleepy ×1