mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 22:58:46 +00:00
Add #no_broadcast procedure parameter to disallow automatic array programming broadcasting on procedure arguments
This commit is contained in:
+18
-18
@@ -651,7 +651,7 @@ alpha_add_if_missing :: proc(img: ^Image, alpha_key := Alpha_Key{}, allocator :=
|
||||
// We have keyed alpha.
|
||||
o: GA_Pixel
|
||||
for p in inp {
|
||||
if p == key.r {
|
||||
if p.r == key.r {
|
||||
o = GA_Pixel{0, key.g}
|
||||
} else {
|
||||
o = GA_Pixel{p.r, 255}
|
||||
@@ -710,7 +710,7 @@ alpha_add_if_missing :: proc(img: ^Image, alpha_key := Alpha_Key{}, allocator :=
|
||||
// We have keyed alpha.
|
||||
o: GA_Pixel_16
|
||||
for p in inp {
|
||||
if p == key.r {
|
||||
if p.r == key.r {
|
||||
o = GA_Pixel_16{0, key.g}
|
||||
} else {
|
||||
o = GA_Pixel_16{p.r, 65535}
|
||||
@@ -842,11 +842,11 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
bg := G_Pixel{}
|
||||
if temp_bg, temp_bg_ok := img.background.(RGB_Pixel_16); temp_bg_ok {
|
||||
// Background is RGB 16-bit, take just the red channel's topmost byte.
|
||||
bg = u8(temp_bg.r >> 8)
|
||||
bg.r = u8(temp_bg.r >> 8)
|
||||
}
|
||||
|
||||
for p in inp {
|
||||
out[0] = bg if p == key else p
|
||||
out[0] = bg if p.r == key else p
|
||||
out = out[1:]
|
||||
}
|
||||
|
||||
@@ -865,8 +865,8 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
for p in inp {
|
||||
a := f32(p.g) / 255.0
|
||||
c := ((1.0 - a) * bg + a * f32(p.r))
|
||||
out[0] = u8(c)
|
||||
out = out[1:]
|
||||
out[0].r = u8(c)
|
||||
out = out[1:]
|
||||
}
|
||||
|
||||
} else if .alpha_premultiply in options {
|
||||
@@ -874,14 +874,14 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
for p in inp {
|
||||
a := f32(p.g) / 255.0
|
||||
c := f32(p.r) * a
|
||||
out[0] = u8(c)
|
||||
out = out[1:]
|
||||
out[0].r = u8(c)
|
||||
out = out[1:]
|
||||
}
|
||||
} else {
|
||||
// Just drop alpha on the floor.
|
||||
for p in inp {
|
||||
out[0] = p.r
|
||||
out = out[1:]
|
||||
out[0].r = p.r
|
||||
out = out[1:]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -951,11 +951,11 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
bg := G_Pixel_16{}
|
||||
if temp_bg, temp_bg_ok := img.background.(RGB_Pixel_16); temp_bg_ok {
|
||||
// Background is RGB 16-bit, take just the red channel.
|
||||
bg = temp_bg.r
|
||||
bg.r = temp_bg.r
|
||||
}
|
||||
|
||||
for p in inp {
|
||||
out[0] = bg if p == key else p
|
||||
out[0] = bg if p.r == key else p
|
||||
out = out[1:]
|
||||
}
|
||||
|
||||
@@ -974,8 +974,8 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
for p in inp {
|
||||
a := f32(p.g) / 65535.0
|
||||
c := ((1.0 - a) * bg + a * f32(p.r))
|
||||
out[0] = u16(c)
|
||||
out = out[1:]
|
||||
out[0].r = u16(c)
|
||||
out = out[1:]
|
||||
}
|
||||
|
||||
} else if .alpha_premultiply in options {
|
||||
@@ -983,14 +983,14 @@ alpha_drop_if_present :: proc(img: ^Image, options := Options{}, alpha_key := Al
|
||||
for p in inp {
|
||||
a := f32(p.g) / 65535.0
|
||||
c := f32(p.r) * a
|
||||
out[0] = u16(c)
|
||||
out = out[1:]
|
||||
out[0].r = u16(c)
|
||||
out = out[1:]
|
||||
}
|
||||
} else {
|
||||
// Just drop alpha on the floor.
|
||||
for p in inp {
|
||||
out[0] = p.r
|
||||
out = out[1:]
|
||||
out[0].r = p.r
|
||||
out = out[1:]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1112,7 +1112,7 @@ internal_int_prime_next_prime :: proc(a: ^Int, trials: int, bbs_style: bool, all
|
||||
Generate the restable.
|
||||
*/
|
||||
for x := 1; x < _PRIME_TAB_SIZE; x += 1 {
|
||||
res_tab = internal_mod(a, _private_prime_table[x]) or_return
|
||||
res_tab = cast(type_of(res_tab))(internal_mod(a, _private_prime_table[x]) or_return)
|
||||
}
|
||||
|
||||
for {
|
||||
|
||||
+10
-6
@@ -597,6 +597,7 @@ Field_Flag :: enum {
|
||||
Any_Int,
|
||||
Subtype,
|
||||
By_Ptr,
|
||||
No_Broadcast,
|
||||
|
||||
Results,
|
||||
Tags,
|
||||
@@ -616,6 +617,7 @@ field_flag_strings := [Field_Flag]string{
|
||||
.Any_Int = "#any_int",
|
||||
.Subtype = "#subtype",
|
||||
.By_Ptr = "#by_ptr",
|
||||
.No_Broadcast ="#no_broadcast",
|
||||
|
||||
.Results = "results",
|
||||
.Tags = "field tag",
|
||||
@@ -624,12 +626,13 @@ field_flag_strings := [Field_Flag]string{
|
||||
}
|
||||
|
||||
field_hash_flag_strings := []struct{key: string, flag: Field_Flag}{
|
||||
{"no_alias", .No_Alias},
|
||||
{"c_vararg", .C_Vararg},
|
||||
{"const", .Const},
|
||||
{"any_int", .Any_Int},
|
||||
{"subtype", .Subtype},
|
||||
{"by_ptr", .By_Ptr},
|
||||
{"no_alias", .No_Alias},
|
||||
{"c_vararg", .C_Vararg},
|
||||
{"const", .Const},
|
||||
{"any_int", .Any_Int},
|
||||
{"subtype", .Subtype},
|
||||
{"by_ptr", .By_Ptr},
|
||||
{"no_broadcast", .No_Broadcast},
|
||||
}
|
||||
|
||||
|
||||
@@ -650,6 +653,7 @@ Field_Flags_Signature :: Field_Flags{
|
||||
.Const,
|
||||
.Any_Int,
|
||||
.By_Ptr,
|
||||
.No_Broadcast,
|
||||
.Default_Parameters,
|
||||
}
|
||||
|
||||
|
||||
@@ -163,7 +163,7 @@ create_and_start_with_data :: proc(data: rawptr, fn: proc(data: rawptr), init_co
|
||||
t := create(thread_proc, priority)
|
||||
t.data = rawptr(fn)
|
||||
t.user_index = 1
|
||||
t.user_args = data
|
||||
t.user_args[0] = data
|
||||
if self_cleanup {
|
||||
t.flags += {.Self_Cleanup}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user