我想在OpenGL中创建一个与矩阵堆栈类似的环境设置(混合,模板,深度等)的抽象.推入堆栈,进行所需的任何更改,绘制对象,然后弹出堆栈并返回先前的设置.
例如,目前你可能有这样的绘图代码:
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glEnable(GL_DEPTH_TEST);
glDisable(GL_BLEND);
Run Code Online (Sandbox Code Playgroud)
但是对于环境堆栈,它看起来像这样:
glPushEnv();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
//Draw operations
glPopEnv();
Run Code Online (Sandbox Code Playgroud)
我认为只有两种方法可以做到这一点:
所以选项1显然要简单得多.但是如果我使用其他人的代码,我会遇到一个问题,因为我不一定知道它对环境做了什么改变,因此我的数据结构会不同步.而且由于重点是确保环境设置正确的简单方法,这并不酷.
所以我的问题是,在这个上下文中,我如何更改OpenGL环境功能指向的功能?
我最近一直在查看卡布奇诺和阿特拉斯,他们似乎已经将相对和绝对的定位抽象为"有效"的东西.我想知道那些熟悉这个项目的人 - 他们是怎么做到的?
我一直认为相对和绝对定位是一种思考定位元素的模糊方式,所以我对此非常好奇.
我可以查看的任何帮助或资源都很棒!
JDBC提供了一个API,可用于连接到不同的RDBMS或类似的数据存储.但数据存储区的实现方式不同(例如SQL方言).
是否可以以这种方式使用JDBC,我的查询和语句适用于大多数常见的RDBMS(例如:Oracle,PostgreSQL,SQL Server,MySQL)?
这个问题在两个方面对我很有意思:*常见SQL(INSERT,UPDATE,SELECT等)*访问元数据(获取有关表和列的信息)
我目前正在尝试使用自编写的持久性框架,并希望在其下插入JDBC数据存储区.因此,如果我编写JDBC数据存储区适配器,那么它将很好,如果它可以在大多数常见的RDBMS上工作.
提前致谢
我今天尝试使用“帮助类样式”编写CSS,Twitter上的许多开发人员表示这是一种不良做法。
这是一个例子:
<span class="et-margin-top-30 et-width-400 et-display-inline">
<p class="et-common-frame-shadow et-inner-img-shadow">
<img class="et-common-frame-img" src="img3.jpg"/>
</p>
<h3 class="et-margin-top-10 et-fontsize-26 et-fontweight-bold">foo</h3>
<p class="et-margin-top-10">bar</p>
</span>
Run Code Online (Sandbox Code Playgroud)
为什么这是一个不好的做法?谁能告诉?我们什么时候应该使用.clear之类的帮助器类?
假设我想出于不同的原因抽象集合上的操作:
现在为了简单起见,让我们推荐一个集合
class Book {
public string Title { get; set; };
public string SubTitle { get; set; }
public bool IsSold { get; set; }
public DateTime SoldDate { get; set; }
public int Volums { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有一个类型只需要搜索Book::Title(区分大小写),所以我可以定义我的抽象:
interface ITitleSearcher {
bool ContainsTitle(string title);
}
Run Code Online (Sandbox Code Playgroud)
然后实施
class CaseSensitiveTitleSearcher : ITitleSearcher { ... }
class NoCaseSensitiveTitleSearcher : ITitleSearcher { ... }
Run Code Online (Sandbox Code Playgroud)
并将其消费为
class TitleSearcherConsumer {
public TitleSearcherConsumer(ITitleSearcher searcher) { // <- ctor injection
}
} …Run Code Online (Sandbox Code Playgroud) 在我的接口中,通常有一个IList<ISomeType>代表List类型的成员,并且说我期望一个支持Add方法的实现.
但是在接口实现中,有一个
IList<ISomeType> = new List<ISomeType>()
Run Code Online (Sandbox Code Playgroud)
例如,每当我使用List时,我都必须进行转换
(this.MyList as List<IMyType>).AddRange(someType.ToList());
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?如何避免这种演员?
- 编辑以询问更多信息 -
而不是扩展方法,是否有一个小的linq表达式来解决这个问题?
IList<string> list = new List<string>();
var items = new[] { "1", "2", "3" };
items.ToList().ForEach(x => list.Add(x));
Run Code Online (Sandbox Code Playgroud)
但这看起来并不是很直接,因为它颠覆了正在做的事情.(操作在要添加的项目上,而不在列表中).
有什么比这更好的?可以在列表上做些什么?
从FP课程:
type Set = Int => Boolean // Predicate
/**
* Indicates whether a set contains a given element.
*/
def contains(s: Set, elem: Int): Boolean = s(elem)
Run Code Online (Sandbox Code Playgroud)
为什么这才有意义?
assert(contains(x => true, 100))
Run Code Online (Sandbox Code Playgroud)
基本上它所做的是为100函数提供值x => true.即,我们提供100,它返回true.
但这与集合有何关系?
无论我们放什么,它都会回归true.感觉在哪里?
据我所知,我们可以提供我们自己的一套执行/功能,因为这将代表提供的值是一组内部(或没有)的事实一个参数-那么(只)本实施使得contains由某种意义上/意/逻辑来填充函数/功能.
但到目前为止,它看起来像一个无意义的功能.它被命名,contains但名称不代表逻辑.我们可以调用它,apply()因为它的作用是将一个函数(第一个参数)应用于一个值(第二个参数).只有名称contains可以告诉读者作者可能想说什么.可能不是太抽象吗?
abstraction functional-programming scala higher-order-functions
我有一个超类,Super有一个子类SubA
public class Super{}
public class SubA : Super{}
Run Code Online (Sandbox Code Playgroud)
我想要一个接口来定义对Super.
public interface IDoer
{
List<Super> GetObjects();
void SaveObjects(List<Super> items);
}
Run Code Online (Sandbox Code Playgroud)
所以基本上,我希望能够多态地传递 的集合Supers,但List<SubA>不是List<Super>. 所以我的 subADoer 没有实现 IDoer。
public class SubADoer : IDoer
{
public List<SubA> GetObjects{ return new SubA()}
public void SaveObjects(List<SubA> items){//save}
}
Run Code Online (Sandbox Code Playgroud)
我如何抽象对象的列表(或其他一些集合类型)来反映构成它们的类型之间的关系?
use once_cell::sync::OnceCell;
pub trait SomeTrait {}
pub struct Impl1 {}
impl SomeTrait for Impl1 {}
pub static GLOBAL_THING: OnceCell<Box<dyn SomeTrait>> = OnceCell::new();
pub fn main() {
GLOBAL_THING.set(Box::new(Impl1 {})).unwrap();
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误,但不知道如何解释它的含义或修复它。
error[E0599]: the method `unwrap` exists for enum `Result<(), Box<(dyn SomeTrait + 'static)>>`, but its trait bounds were not satisfied
--> src/main.rs:11:42
|
11 | GLOBAL_THING.set(Box::new(Impl1 {})).unwrap();
| ^^^^^^ method cannot be called on `Result<(), Box<(dyn SomeTrait + 'static)>>` due to unsatisfied trait bounds
|
= note: the following trait bounds …Run Code Online (Sandbox Code Playgroud) abstraction ×10
c# ×3
atlas ×1
c ×1
c++ ×1
cappuccino ×1
collections ×1
css ×1
helper ×1
interface ×1
java ×1
jdbc ×1
list ×1
nsarray ×1
objective-c ×1
opengl ×1
polymorphism ×1
positioning ×1
rust ×1
scala ×1
sql ×1
traits ×1