所以我正在阅读这篇文章,其中包含"SDL中多线程编程的提示和建议" - https://vilimpoc.org/research/portmonitorg/sdl-tips-and-tricks.html
它谈到SDL_PollEvent效率低,因为它可能导致过多的CPU使用,因此建议使用SDL_WaitEvent.
它显示了两个循环的示例,但我无法看到它如何与游戏循环一起使用.是不是SDL_WaitEvent只能由不需要不断更新的东西使用,即如果你有游戏运行,你会在每一帧都执行游戏逻辑.
我能想到的唯一可以用的是像绘图程序这样的程序,其中只有用户输入需要操作.
我是否认为我应该继续使用SDL_PollEvent进行通用游戏编程?
我假设SDL 2在后台使用OpenGL渲染(或者在Windows上使用DirectX),这个决定是由SDl本身做出的.
我已经看过教程直接在SDL中显示OpenGL的使用,并想知道有什么好处,如果你有直接使用OpenGL会得到什么?是否存在SDL本身无法实现的内容?
我已经看到了很多项目(通常是游戏引擎),其中所有标题包括放在单个头文件中,有时也包含宏等等.
// Master.h
#include "header1.h"
#include "header2.h"
#include "header3.h"
.
.
#include "headerN.h"
Run Code Online (Sandbox Code Playgroud)
然后在使用代码时,标准将只包含Master.h文件.
其他项目的工作原理是源文件应仅包含所需的标头.
我想知道的是,对于最佳实践是否存在确定的答案,最好是具有可衡量的结果,还是个人偏好?
作为渲染除颜色之外的多个相同纹理的简单方法,我将一个纯白色圆圈加载到然后SDL_Texture调用SDL_SetTextureColorMod()给它我想要制作圆圈的颜色。
如果纹理是单独的(示例 1),那么这一切都可以正常工作,但如果我共享SDL_Texture以便多个对象都引用它,则意味着SDL_SetTextureColorMod()必须在对象渲染纹理之前调用每个渲染帧,因为它上次给出的颜色可能已被另一个对象更改(示例 2)。
SDL_SetTextureColorMod()对于可能有相当多共享纹理的对象,调用每个渲染帧是否会导致重大性能问题?
需要它的原因是系统是使用具有基本引用计数的共享纹理功能来设计的(我知道可能有更好的方法使用智能指针来做到这一点,但这不是这里讨论的主题)。SDL_Texture让每个对象都有自己的副本,这样它只需设置颜色一次(或每当需要更改时)而不是每个渲染帧设置颜色会更好吗?
示例1:
SDL_Texture* tex1;
SDL_Texture* tex2;
SDL_Texture* tex3;
...
// All 3 instances have their own SDL_Texture
MyObject A(tex1);
MyObject B(tex2);
MyObject C(tex3);
...
// A call to set the color of the texture is only required once for each class
Run Code Online (Sandbox Code Playgroud)
示例2:
SDL_Texture* tex;
...
// All 3 instances share the SDL_Texture
MyObject A(tex);
MyObject B(tex);
MyObject C(tex);
...
// A call to set …Run Code Online (Sandbox Code Playgroud) 我可以使用SDL_image在(png)加载图像没问题,也可以完美地显示它.我想做的是逐渐淡化图像从完全透明到完全不透明.我已经看到一些教程提到SDL_SetAlpha但这是用于SDL_SurfaceSDL_image加载SDL_Texture硬件加速的地方.
任何人都可以帮助我们在保持良好性能的同时如何做到这一点?
我有一个数据库,其中包含以下两个表 - Departments和Operations
关键值Departments是:
DEPT_REF
DEPT_NAME
DEPT_FUNCTION
Run Code Online (Sandbox Code Playgroud)
关键值Operations是:
OPS_REF
OPS_NAME
DEPT_REF
Run Code Online (Sandbox Code Playgroud)
我需要解决的是一个查询,它将为我提供一个列表Operations.OPS_NAME,Departments.DEPT_NAME以及Departments.DEPT_FUNCTION它们是重复的但它应该忽略大小写.理想情况下,它也应该有一个计数.
例如:
Departments
+----------+-----------+---------------+
| DEPT_REF | DEPT_NAME | DEPT_FUNCTION |
+----------+-----------+---------------+
| 0001 | Home | Live here |
+----------+-----------+---------------+
| 0002 | HOME | LIVE HERE |
+----------+-----------+---------------+
| 0003 | HOME | Live here |
+----------+-----------+---------------+
| 0004 | work | Work Here |
+----------+-----------+---------------+
| 0005 | Work | Work Here |
+----------+-----------+---------------+ …Run Code Online (Sandbox Code Playgroud) 所以我现在整天都在和这个问题作斗争.起初我认为必须使用我的调用代码,即使这一切看起来都不错.调用代码只是来自VB代码隐藏文件的标准调用,并且无论如何都没有链接到数据绑定.我提到这一点,因为我已经看到很多其他人因为DataGrids等而遇到了这个问题.
然后我转到数据库本身并手动执行该过程,它在SQL Sevrer Manager中给出了相同的错误.我已经尝试删除程序并重新创建它,甚至从头开始重写它仍然会发生.我也尝试从@Password参数中删除默认的NULL值,但仍然没有更改.
我正在运行SQL Server 2008 R2
这是程序代码:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_AddUser]
@Username varchar(50),
@Fullname varchar(50),
@Password varchar(50) = NULL,
@Datecreated DateTime,
@RoleID int,
@ResetPwd bit,
@Email varchar(50),
@locked bit,
@Sign varchar(max),
@Sysuser bit
AS
BEGIN
INSERT INTO users (
user_name,
full_name,
password,
datetime_created,
role_id,
password_reset,
email_address,
locked,
email_signature,
asrsys_user)
VALUES (
@Username,
@Fullname,
@Password,
@Datecreated,
@RoleID,
@ResetPwd,
@Email,
@locked,
@Sign,
@Sysuser)
END
Run Code Online (Sandbox Code Playgroud)